例項屬性和類屬性

2022-09-01 11:30:13 字數 3792 閱讀 8406

例項僅擁有資料屬性(方法嚴格來說是類屬性),後者只是與某個類的例項相關聯的資料值,並且可以通過句點屬性標識法來訪問。這些值獨立於其它例項或類。當乙個例項被釋放後,它的屬性 同時也被清除了。

「例項化」例項屬性

設定例項的屬性可以在例項建立後任意時間進行,也可以在能夠訪問例項的**中進行。構造器__init()__是設定這些屬性的關鍵點之一。 

python能夠在「執行時」建立例項屬性 。

python 不僅是動態型別,而且在執行時,允許這些物件屬性的動態建立。 

假如屬性在條件語句中建立,如果該條件語句塊並未被執行,屬性也就不存在,而你 在後面的**中試著去訪問這些屬性,就會有錯誤發生。 

class

people:

#類屬性

address = "廣東"

def__init__

(self):

#例項屬性

self.name = "

hugo

"self.age = 18p =people()

#修改例項屬性

p.age = 19

print

(p.address)#廣東

print

(p.name)

#hugo

print

(p.age)#19

print

(people.address)#廣東

print

(people.name)#報錯

print

(people.age)

#報錯

檢視例項屬

內建函式dir()可以顯示類屬性,同樣還可以顯示所有例項屬性

class

c:

pass

c =c()

c.foo = "

foo"

c.bar = "

bar"

print

(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+2j

print(x.__class__)#

print

(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']

'''#

訪問它的資料屬性

print

(x.imag)

#2.0

print

(x.real)

#1.0

print

(x.conjugate())

#(1-2j)

#print(x.__dict__)

#報錯,內建型別中不存在這個屬性

例項屬性和類屬性

類屬性僅是與類相關的資料值,和例項屬性不同,類屬性和例項無關。這些值像靜態成員那樣被引用,即使在多次例項化中呼叫類, 它們的值都保持不變。不管如何,靜態成員不會因為例項而改變它們的值,除非例項中顯式改變它們的值。

類和例項都是名字空間。類是類屬性的名字空間,例項則是例項屬性的。

關於類屬性和例項屬性,還有一些方面需要指出。你可採用類來訪問類屬性,如果例項沒有同 名的屬性的話,你也可以用例項來訪問。

訪問類屬性

訪問屬性,首先會在例項中去搜尋,然後是類,再然後就是從繼承樹中的基類。

class

c: bar = "

bar"

c =c()

#通過類來訪問屬性

print

(c.bar)

#bar

#通過例項來訪問屬性

print

(c.bar)

#bar

#只能通過類來更新

c.bar = c.bar + "

foo"

print

(c.bar)

#barfoo

#例項訪問它,其值已經改變

print

(c.bar)

#barfoo

#c.bar = c.bar + "goo"

#print(c.bar)

#bar

#print(c.bar)

#bargoo

注意:

任何對例項屬性的賦值都會建立乙個例項屬性(如果不存在的話)並且對其賦值。如果類屬性中存在同名的屬性,有趣的***即產生。

class

bar:

x = 1bar =bar()

print

(bar.x)#1

bar.x = 2

print

(bar.x)#2

print

(bar.x)#1

#總結:沒有變,只是建立了乙個新的例項屬性,覆蓋了對類屬行的引用。類屬性並沒有受到影響

#刪除例項屬性,仍然能夠訪問到類屬性

delbar.x

print

(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 三國 西...