Python類屬性,例項屬性

2021-07-24 09:53:16 字數 1539 閱讀 8347

**dreamfor的部落格:

1.python類資料屬性:定義在類裡面但在函式外面的變數,它們都是靜態的。

#一段很簡單的**,但反應了很多

>>> class a():

a=1#乙個類裡面有個屬性a

>>> a=a()

>>> b=a()

>>> a.a

>>> b.a

>>> a.a

#這個屬效能被例項和類訪問

>>> 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__()方法裡的變數就是例項屬性,這些屬性只有被建立時才會被建立(說實話這句話我沒看懂啥意思,是因為python是動態語言的緣故?哪位能給我講下:) )。

>>> class test():

classvar=2

def __init__(self):

self.instancevar=3

#提醒一下這裡要寫self.否則就是個區域性變數了,還有__init__沒有返回值

>>> atest=test()

>>> btest=test()

>>> atest.__dict__

>>> test.__dict__

#注意看例項和類屬性的區別,類有類屬性,但沒有例項屬性,例項有例項屬性,但沒有類屬性,那我們可能會疑惑為什麼我們可以通過例項訪問類屬性(就像上面的一樣)

#在類例項中查詢屬性的時候,首先在例項自己的作用域中查詢,如果沒有找到,則再在類定義的作用域中查詢。在對類例項屬性進行賦值的時候,實際上會在類例項定義的作用域中新增乙個屬性(如果還不存在的話),並不會影響到相應類中定義的同名屬性。

參見3.當類屬性與例項屬性同名時,乙個例項訪問這個屬性時例項屬性會覆蓋類屬性,但類訪問時不會。具體還有很多可以看看python核心程式設計13章

Python 類屬性 例項屬性

1.類的三大要素 類名 屬性 方法 屬性又分為例項屬性和類屬性 1 class tool object 2 屬性3 num 045 方法6def init self,new name 7 self.name new name 寫在 init 中的是例項屬性,也是通過方法定義的,是跟著例項物件的 寫在...

Python 類屬性與例項屬性

python在 init self 方法中定義的屬性為例項屬性,並且python的例項可以動態地增加例項屬性 直接跟在類名後邊定義的屬性都預設是類屬性 類似於c 的static變數 要明白雷和例項都是命名空間。類是類屬性的命名空間,例項則是例項屬性的命名空間。例項屬性能夠在名稱訪問 搜尋 中覆蓋類屬...

Python例項屬性與類屬性

class foo object version 1.0 f foo print foo.version 1.0 print f.version 1.0 foo.version 0.1 print foo.version 1.1 print f.version 1.1 f.version 0.1 p...