類屬性和實例屬性 Python從入門到放棄

1.Python類數據屬性:定義在類裏面但在函數外面的變量,它們都是靜態的。

#一段很簡單的代碼,但反應了不少函數

>>> class A():性能

    a=1spa

#一個類裏面有個屬性a繼承

    

>>> a=A()作用域

>>> b=A()文檔

>>> a.a字符串

>>> b.ait

>>> A.aio

#這個屬性能被實例和類訪問function

>>> a.a=2

>>> b.a

>>> A.a

#改變實例a的屬性a,實例b和類的a並無改變

>>> A.a=2

>>> b.a

#改變類的屬性,實例的屬性隨着改變,這就好像遺傳同樣,一個物種分化爲兩個不一樣的物種A,B,隨便A物種怎麼變,對B不會產生影響,但若是穿越時空,改變了它們祖先的一些特色,那麼,A,B都會隨着改變

 

>>> dir(A)

['__doc__', '__module__', 'a']

默認產生的屬性

 

C.__name__ 類C的名字(字符串)

C.__doc__ 類C的文檔字符串

C.__bases__ 類C的全部父類構成的元組

C.__dict__ 類C的屬性

C.__module__ 類C定義所在的模塊(1.5 版本新增)

C.__class__ 實例C對應的類(僅新式類中)

 

>>> A.__module__

'__main__'

Python支持模塊間的類繼承,也就是說你在文件中定義的類都是這個模塊的子類,那麼經過from module import class就能夠將一個類引入另外一個文件,反之也能夠定位類的位置

2.Python類實例屬性

定義在__init__()方法裏的變量就是實例屬性,這些屬性只有被建立時纔會被建立。

>>> class Test():

    classVar=2

    def __init__(self):

        self.instanceVar=3

#提醒一下這裏要寫self.不然就是個局部變量了,還有__init__沒有返回值

        

>>> atest=Test()

>>> btest=Test()

>>> atest.__dict__

{'instanceVar': 3}

>>> Test.__dict__

{'__module__': '__main__', 'classVar': 2, '__doc__': None, '__init__': <function __init__ at 0x01E68930>}

#注意看實例和類屬性的區別,類有類屬性,但沒有實例屬性,實例有實例屬性,但沒有類屬性,那咱們可能會疑惑爲何咱們能夠經過實例訪問類屬性(就像上面的同樣)

#在類實例中查找屬性的時候,首先在實例本身的做用域中查找,若是沒有找到,則再在類定義的做用域中查找。在對類實例屬性進行賦值的時候,實際上會在類實例定義的做用域中添加一個屬性(若是還不存在的話),並不會影響到相應類中定義的同名屬性。

當類屬性與實例屬性同名時,一個實例訪問這個屬性時實例屬性會覆蓋類屬性,但類訪問時不會。

相關文章
相關標籤/搜索