1. 程式人生 > >類屬性和例項屬性

類屬性和例項屬性

類屬性和例項屬性

類屬性就是類物件所擁有的屬性,它被所有類物件例項物件所共有,在記憶體中只存在一個副本,這個和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)

總結

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