關(guān)于python類的知識(shí)學(xué)習(xí)筆記

class MyClass(object):
    def __init__(self):
        print 'this is init'
    def func(self):
        print 'this is func'

if __name__=='__main__':
    myClass=MyClass()
    myClass.func()

這邊是沒有傳入?yún)?shù),首先運(yùn)行的是初始化的參數(shù)
運(yùn)行結(jié)果:

this is init
this is func

class MyClass(object):
    def __init__(self,name):
        print 'this is init'
        self.name=name
    def func(self):
        print 'this is func'
        print self.name

if __name__=='__main__':
    myClass=MyClass('xiaoye')
    myClass.func()

運(yùn)行結(jié)果:

this is init
this is func
xiaoye

這里要注意這里MyClass要傳入name這個(gè)參數(shù),因?yàn)槎x 的init這個(gè)初始里面就有這個(gè)參數(shù) 然后再把這個(gè)參數(shù)name賦值給類里面的self.name 這里也可以命名為其它比如 self.nameOther 這個(gè)賦值后下面的類里面的就可以直接用self.name調(diào)用

class MyClass():
    def func(self,name):
        print 'this is func'
        print name

if __name__=='__main__':
    myClass=MyClass()
    myClass.func('xiaoye')  

這里要注意的是,參數(shù)是在方法那邊調(diào)用的。這里其實(shí)隱藏了默認(rèn)的init初始化, 但是里面方法的func調(diào)用的name屬性不能用self.name調(diào)用 會(huì)提示未定義 因?yàn)榇藭r(shí)就不是類的,而是這個(gè)方法的參數(shù) 而在上面的幾個(gè)里面 就要調(diào)用self.name 因?yàn)榇藭r(shí)是類的

class MyClass():
    def __init__(self, name):
        print 'this is init'
        self.name = name
    def func(self):
        print 'this is func'
        print self.name

class UpperMyClass(MyClass):
    def __init__(self,name):
        MyClass.__init__(self,name)

    def func(self):
        print 'this is func'
        print self.name.upper()

if __name__=='__main__':
    #myClass=MyClass('xiaoye')
    #myClass.func()
    upFunc=UpperMyClass('xiaoye')
    upFunc.func()

運(yùn)行結(jié)果:

this is init
this is func
XIAOYE

這里說的就是類的繼承,UpperMyClass 繼承了MyClass的屬性和方法 同時(shí)可以對(duì)方法進(jìn)行改寫這就叫做多態(tài),初始化那個(gè)可以省略

    upFunc=UperMyClass('xiaoye')
    upFunc.func()
    print type(upFunc.func)
    print dir(upFunc)
    print upFunc.__doc__
    print upFunc.__init__
    print upFunc.__module__
    print upFunc.name

運(yùn)行結(jié)果:

this is init
this is func
XIAOYE
<type 'instancemethod'>
['doc', 'init', 'module', 'func', 'name']
None
<bound method UperMyClass.init of <main.UperMyClass instance at 0x000000000266B188>>
main
xiaoye

dir()可以獲得一個(gè)對(duì)象的所有屬性和方法 'instance 實(shí)例 method 方法 type(upFunc.func)就是實(shí)例方法

class UperMyClass(MyClass):
    def __init__(self,name):
        MyClass.__init__(self,name)

    def func(self):
        print 'this is func'
        print self.name.upper()

    def __call__(self):
        self.func()

if __name__=='__main__':
    #myClass=MyClass('xiaoye')
    #myClass.func()
    upFunc=UperMyClass('xiaoye')
    #upFunc.func()
    upFunc()
    print callable(upFunc)

運(yùn)行結(jié)果:

this is init
this is func
XIAOYE
True

特別的專有方法call()方法,可以直接調(diào)用 原先在上面必須要用實(shí)例方法調(diào)用 upFunc.func() 現(xiàn)在可以實(shí)現(xiàn) 內(nèi)部調(diào)用 就不用用 upFunc.func()這樣調(diào)用 callable 是用判斷一個(gè)對(duì)象是否能被調(diào)用 能調(diào)用就是對(duì)象 不能就是函數(shù)

def dog(action):
    print action+'ing'

class MyClass():
    def func(self,name):
        print 'this is func'
        print name
        dog(name)

if __name__=='__main__':
    myClass=MyClass()
    myClass.func('xiaoye')

運(yùn)行結(jié)果:
this is func
xiaoye
xiaoyeing

class MyClass():
    def dog(self,action):
        print action + 'ing'

    def func(self,name):
        print 'this is func'
        print name
        self.dog(name)

if __name__=='__main__':
    myClass=MyClass()
    myClass.func('xiaoye')  

運(yùn)行結(jié)果:
this is func
xiaoye
xiaoyeing

如果是直接用dog(name) 會(huì)提示找不到dog 因?yàn)榇藭r(shí)dog是類的私有方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容