注: 1. a 被稱為類test的屬性 2. func_1 被稱為類test的方法 3. 所有的class都是object的派生類
注意:子類重寫__init__
不會自動調(diào)用基類的__init__
:與java不同。
對于任何類C,C具有六個(gè)特殊屬性:
C.__name__ 類的名字(字符串); C.__doc__ 類的文檔字符串(不能繼承);C.__bases__ 類C的所有父類構(gòu)成的元組C.__dict__ 類C的屬性(字典)C.__module__ 類C定義所在的模塊C.__class__ 實(shí)例C所對應(yīng)的類(用的較少,只在新式類中)對于實(shí)例屬性c = C()具有兩個(gè)特殊屬性:
c.__class__ 實(shí)例c的類c.__dict__ c的屬性從實(shí)例中訪問類屬性需謹(jǐn)慎: 給一個(gè)與類屬性同名的實(shí)例屬性賦值,我們會“隱藏”類屬性。即實(shí)例對于屬性進(jìn)行的修改只位于實(shí)例中,類中的同名屬性不會改變。但是類屬性的修改會影響到所有實(shí)例。
class Foo(object): x = 1.5 foo = Foo() foo.x #值為1.5 foo.x = 1.7 #或者foo.x += 0.2 Foo.x #值仍為1.5靜態(tài)方法:不需實(shí)例化,可以直接用類名調(diào)用的方法。 類方法:可以通過類或它的實(shí)例來調(diào)用的方法。不管你是用類來調(diào)用這個(gè)方法還是類實(shí)例調(diào)用這個(gè)方法,該方法的第一個(gè)參數(shù)總是定義該方法的類對象。
staticmethod() 創(chuàng)建靜態(tài)方法,不需要self作為第一個(gè)參數(shù) @staticmethodclassmethod() 創(chuàng)建類方法,很多人使用cls作為變量名。 @classmethod class TestStaticMethod: def foo(): print ‘hahaha' foo = staticmethod(foo) #如果沒有這個(gè)內(nèi)建函數(shù),會報(bào)錯(cuò),因?yàn)闆]有self參數(shù) class TestClassMethod: def foo(cls): print ‘hehehe' foo = classmethod(foo) #同上 ##現(xiàn)在可以用函數(shù)修飾符代替上面的方式(推薦): class TestStaticMethod: @staticmethod def foo(): print ‘hahaha' class TestClassMethod: @classmethod def foo(cls): print ‘hehehe'python屬性默認(rèn)是公開的。使用訪問控制符來限定成員函數(shù)的訪問,將對象數(shù)據(jù)隱藏,實(shí)現(xiàn)封裝。 1. 雙下劃線(__)
:由雙下劃線開始的屬性在運(yùn)行時(shí)不能直接訪問。 2. 單下劃線(_)
:簡單的模塊級私有化只需在屬性(或函數(shù))名前使用單下劃線字符,阻止模塊屬性用import來加載。
特殊方法允許類通過重載標(biāo)準(zhǔn)操作符來模擬標(biāo)準(zhǔn)類型,這些方法都是以雙下劃線開始及結(jié)尾的。 1. 模擬標(biāo)準(zhǔn)類型 2. 重載操作符
__add__(self,obj)方法 重載 + __iadd__()方法 重載+=__sub__()方法 重載 - __mul__()方法 重載 *__div__()方法 重載/綁定:方法只有在其所屬類擁有實(shí)例的時(shí)候才能被調(diào)用, 非綁定:在子類構(gòu)造器__init__()
中調(diào)用覆蓋的父類__init__()
方法中使用(__del__()
同) 1. 實(shí)例化這個(gè)class (test) t = test()
2. 使用 class.method()
的方式去調(diào)用 class 的內(nèi)置方法。 注意:當(dāng)定義一個(gè)class的內(nèi)置方法method時(shí),method的參數(shù)的第一個(gè)永遠(yuǎn)是self。
issubclass(sub,sup)
:判斷一個(gè)類是否是另一個(gè)類的子類,返回布爾值 isinstance(obj1,obj2)
:判定一個(gè)對象是否是另一個(gè)給定類的實(shí)例,返回布爾值。*attr()
系列函數(shù)可以在各種對象下工作
super()
:幫助找出相應(yīng)的父類,然后方便調(diào)用相關(guān)屬性。super(MyClass,self).__init__()
新聞熱點(diǎn)
疑難解答