python3之類屬性與例項屬性

2022-09-14 23:30:34 字數 2134 閱讀 1454

類屬性就相當與全域性變數,例項物件共有的屬性例項物件的屬性為例項物件自己私有

類屬性就是類物件(tool)所擁有的屬性,它被所有類物件的例項物件(例項方法)所共有,在記憶體中只存在乙個副本,這個和c++中類的靜態成員變數有點類似。對於公有的類屬性,在類外可以通過類物件和例項物件訪問。

class

people(object):

name = 'jack'

p =people()#建立例項物件

print(people.name) #通過類物件,列印類屬性:name

print(p.name) #通過例項物件,列印類屬性:name

print(p.__age) #錯誤,不能在類外通過例項物件訪問私有的類屬性

print(people.__age) 

#錯誤,不能在類外通過類物件訪問私有的類屬性

執行結果

jack

jack

print(p.__age) #錯誤,不能在類外通過例項物件訪問私有的類屬性

attributeerror: 'people' object has no attribute '__age'

class

people(object):

address = 'shandong'def __init__(self):

self.name = 'jack'self.age = 20p =people() #建立例項物件

p.age = 12# 通過例項物件呼叫例項屬性,更改例項屬性值

print(p.age) # 通過例項物件呼叫例項屬性,並列印

print(p.name) # 通過例項物件呼叫例項屬性,並列印

print(p.address) # 通過例項物件呼叫類屬性,並列印

print('-----------------呼叫類屬性--------')

print(people.address) # 通過類物件呼叫類屬性,並列印

print(people.name) # 錯誤(程式會報錯),通過類物件呼叫例項屬性,並列印

print(people.age) # 錯誤(程式會報錯),通過類物件呼叫例項屬性,並列印

結果:12

jack

shandong

-----------------呼叫類屬性--------

shandong

traceback (most recent call last):

file "/users/admin/documents/python/test.py", line 14, in

print(people.name)  # 錯誤(程式會報錯),通過類物件呼叫例項屬性,並列印

attributeerror: type object 'people' has no attribute 'name'

class

people():

coutry = 'china'#類屬性

print(people.coutry)

p =people()

print(p.coutry)

p.coutry = 'japan'print(p.coutry) # 例項屬性會遮蔽掉同名的類屬性:japan

print(people.coutry)

del p.coutry # 刪除例項屬性

print(p.coutry) #例項屬性被刪除後,再呼叫同名稱的屬性,會呼叫類屬性:china

如果需要在類外修改類屬性必須通過類物件去引用然後進行修改。如果通過例項物件去引用,會產生乙個同名的例項屬性,這種方式修改的是例項屬性,不會影響到類屬性,並且之後如果通過例項物件去引用該名稱的屬性,例項屬性會強制遮蔽掉類屬性,即引用的是例項屬性,除非刪除了該例項屬性

python基礎之類屬性和例項屬性

屬性 類屬性和例項屬性 類屬性 就是類物件所有的屬性 小結 類屬性 是可以 被 類物件和例項物件共同訪問的 例項屬性只能由例項物件訪問 class student name 黎明 屬於類屬性 就是student類物件所擁有的 def init self,age self.age age 例項屬性 p...

python3 物件導向 例項屬性和類屬性

由於python是動態語言,根據類建立的例項可以任意繫結屬性。給例項繫結屬性的方法是通過例項變數,或者通過self變數 class student object def init self,name self.name name s student bob s.score 90 但是,如果stude...

Python 類屬性與例項屬性

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