#一段很簡單的代碼,但反應了不少函數
>>> 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就能夠將一個類引入另外一個文件,反之也能夠定位類的位置
定義在__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>}
#注意看實例和類屬性的區別,類有類屬性,但沒有實例屬性,實例有實例屬性,但沒有類屬性,那咱們可能會疑惑爲何咱們能夠經過實例訪問類屬性(就像上面的同樣)
#在類實例中查找屬性的時候,首先在實例本身的做用域中查找,若是沒有找到,則再在類定義的做用域中查找。在對類實例屬性進行賦值的時候,實際上會在類實例定義的做用域中添加一個屬性(若是還不存在的話),並不會影響到相應類中定義的同名屬性。
當類屬性與實例屬性同名時,一個實例訪問這個屬性時實例屬性會覆蓋類屬性,但類訪問時不會。