例項僅擁有資料屬性(方法嚴格來說是類屬性),後者只是與某個類的例項相關聯的資料值,並且可以通過句點屬性標識法來訪問。這些值獨立於其它例項或類。當乙個例項被釋放後,它的屬性 同時也被清除了。
「例項化」例項屬性
設定例項的屬性可以在例項建立後任意時間進行,也可以在能夠訪問例項的**中進行。構造器__init()__是設定這些屬性的關鍵點之一。
python能夠在「執行時」建立例項屬性 。
python 不僅是動態型別,而且在執行時,允許這些物件屬性的動態建立。
假如屬性在條件語句中建立,如果該條件語句塊並未被執行,屬性也就不存在,而你 在後面的**中試著去訪問這些屬性,就會有錯誤發生。
classpeople:
#類屬性
address = "廣東"
def__init__
(self):
#例項屬性
self.name = "
hugo
"self.age = 18p =people()
#修改例項屬性
p.age = 19
(p.address)#廣東
(p.name)
#hugo
(p.age)#19
(people.address)#廣東
(people.name)#報錯
(people.age)
#報錯
檢視例項屬
內建函式dir()可以顯示類屬性,同樣還可以顯示所有例項屬性
classc:
pass
c =c()
c.foo = "
foo"
c.bar = "
bar"
(dir(c))
'''['__class__', '__delattr__', '__dict__',
'__dir__', '__doc__', '__eq__',
'__format__','__ge__', '__getattribute__',
'__gt__', '__hash__','__init__',
'__init_subclass__', '__le__', '__lt__',
'__module__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '__weakref__', 'bar', 'foo']
'''
例項中乙個特殊屬性__dict__,它是例項屬性構成的乙個字典
print(c.__dict__)#
內建型別屬性
內建型別有例項屬性和類屬性
x = 1+2jprint(x.__class__)#
(dir(x))
'''['__abs__', '__add__', '__bool__',
'__class__', '__delattr__', '__dir__',
'__divmod__', '__doc__', '__eq__',
'__float__', '__floordiv__', '__format__',
'__ge__', '__getattribute__', '__getnewargs__',
'__gt__', '__hash__', '__init__',
'__init_subclass__', '__int__', '__le__',
'__lt__', '__mod__', '__mul__',
'__ne__', '__neg__', '__new__',
'__pos__', '__pow__', '__radd__',
'__rdivmod__', '__reduce__', '__reduce_ex__',
'__repr__', '__rfloordiv__', '__rmod__',
'__rmul__', '__rpow__', '__rsub__',
'__rtruediv__', '__setattr__', '__sizeof__',
'__str__', '__sub__', '__subclasshook__',
'__truediv__', 'conjugate', 'imag', 'real']
'''#
訪問它的資料屬性
(x.imag)
#2.0
(x.real)
#1.0
(x.conjugate())
#(1-2j)
#print(x.__dict__)
#報錯,內建型別中不存在這個屬性
例項屬性和類屬性
類屬性僅是與類相關的資料值,和例項屬性不同,類屬性和例項無關。這些值像靜態成員那樣被引用,即使在多次例項化中呼叫類, 它們的值都保持不變。不管如何,靜態成員不會因為例項而改變它們的值,除非例項中顯式改變它們的值。
類和例項都是名字空間。類是類屬性的名字空間,例項則是例項屬性的。
關於類屬性和例項屬性,還有一些方面需要指出。你可採用類來訪問類屬性,如果例項沒有同 名的屬性的話,你也可以用例項來訪問。
訪問類屬性
訪問屬性,首先會在例項中去搜尋,然後是類,再然後就是從繼承樹中的基類。
classc: bar = "
bar"
c =c()
#通過類來訪問屬性
(c.bar)
#bar
#通過例項來訪問屬性
(c.bar)
#bar
#只能通過類來更新
c.bar = c.bar + "
foo"
(c.bar)
#barfoo
#例項訪問它,其值已經改變
(c.bar)
#barfoo
#c.bar = c.bar + "goo"
#print(c.bar)
#bar
#print(c.bar)
#bargoo
注意:
任何對例項屬性的賦值都會建立乙個例項屬性(如果不存在的話)並且對其賦值。如果類屬性中存在同名的屬性,有趣的***即產生。
classbar:
x = 1bar =bar()
(bar.x)#1
bar.x = 2
(bar.x)#2
(bar.x)#1
#總結:沒有變,只是建立了乙個新的例項屬性,覆蓋了對類屬行的引用。類屬性並沒有受到影響
#刪除例項屬性,仍然能夠訪問到類屬性
delbar.x
(bar.x)
#1
總結:
例項屬性和類屬性
例項屬性和類屬性 由於python是動態語言,根據類建立的例項可以任意繫結屬性。給例項繫結屬性的方法是通過例項變數,或者通過self變數 class student object def init self,name self.name name s student bob s.score 90但是...
類屬性和例項屬性
類屬性就是類物件所擁有的屬性,它被所有類物件的例項物件所共有,在記憶體中只存在乙個副本,這個和c 中類的靜態成員變數有點類似。對於公有的類屬性,在類外可以通過類物件和例項物件訪問 class people object name tom 公有的類屬性 age 12 私有的類屬性 p people p...
類屬性和例項屬性
1.不可修改型別 物件屬性只要賦值,那麼此物件用的屬性就是自己的屬性,不會再用同名的類屬性,類屬性的變化不會再影響到此物件。2.可修改型別 a.修改內部屬性的值,只要修改不是賦值,那麼修改會影響到所有物件以及類屬性。b.如果是重新賦值操作,效果等同於不可修改型別。class a books 三國 西...