類屬性和例項屬性
阿新 • • 發佈:2018-12-11
類屬性和例項屬性
類屬性就是類物件
所擁有的屬性,它被所有類物件
的例項物件
所共有,在記憶體中只存在一個副本,這個和C++中類的靜態成員變數有點類似。對於公有的類屬性,在類外可以通過類物件
和例項物件
訪問
類屬性
class People(object): name = 'Tom' # 公有的類屬性 __age = 12 # 私有的類屬性 p = People() print(p.name) # 正確 print(People.name) # 正確 print(p.__age) # 錯誤,不能在類外通過例項物件訪問私有的類屬性 print(People.__age) # 錯誤,不能在類外通過類物件訪問私有的類屬性
例項屬性(物件屬性)
class People(object): address = '山東' # 類屬性 def __init__(self): self.name = 'xiaowang' # 例項屬性 self.age = 20 # 例項屬性 p = People() p.age = 12 # 例項屬性 print(p.address) # 正確 print(p.name) # 正確 print(p.age) # 正確 print(People.address) # 正確 print(People.name) # 錯誤 print(People.age) # 錯誤
通過例項(物件)去修改類屬性
class People(object):
country = 'china' #類屬性
print(People.country)
p = People()
print(p.country)
p.country = 'japan'
print(p.country) # 例項屬性會遮蔽掉同名的類屬性
print(People.country)
del p.country # 刪除例項屬性
print(p.country)
總結
- 如果需要在類外修改
類屬性
,必須通過類物件
去引用然後進行修改。如果通過例項物件去引用,會產生一個同名的例項屬性
例項屬性
,不會影響到類屬性
,並且之後如果通過例項物件去引用該名稱的屬性,例項屬性會強制遮蔽掉類屬性,即引用的是例項屬性
,除非刪除了該例項屬