類屬性和實體屬性
在了解了類基本的東西之后,下面看一下python中這幾個概念的區別
先來談一下類屬性和實體屬性
在前面的例子中我們接觸到的就是實體屬性(物件屬性),顧名思義,類屬性就是類物件所擁有的屬性,它被所有類物件的實體物件所共有,在記憶體中只存在一個副本,這個和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)
總結
- 如果需要在類外修改
類屬性,必須通過類物件去參考然后進行修改,如果通過實體物件去參考,會產生一個同名的實體屬性,這種方式修改的是實體屬性,不會影響到類屬性,并且之后如果通過實體物件去參考該名稱的屬性,實體屬性會強制屏蔽掉類屬性,即參考的是實體屬性,除非洗掉了該實體屬性,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/39719.html
標籤:Python
上一篇:面向物件-多層繼承
