Python中的類與例項屬性
類屬性與例項屬性
在瞭解了類基本的東西之後,下面看一下python中這幾個概念的區別
先來談一下類屬性和例項屬性
在前面的例子中我們接觸到的就是例項屬性(物件屬性),顧名思義,類屬性就是類物件所擁有的屬性,它被所有類物件的例項物件所共有,在記憶體中只存在一個副本,這個和C++,java中類的靜態成員變數有點類似。對於公有的類屬性,在類外可以通過類物件和例項物件訪問。
類屬性:所屬類,這個類下所有的物件都可以共享這個類屬性。 相當於java中靜態屬性。
比如:
Class Person{
public static String name="abc"
}
1、類屬性
class People(object): name = 'Tom'#公有的類屬性 __age = 12#私有的類屬性 p = People() print(p.name) #正確 print(People.name) #正確 print(p.__age) #錯誤,不能在類外通過例項物件訪問私有的類屬性 print(People.__age) #錯誤,不能在類外通過類物件訪問私有的類屬性 |
2、例項屬性(物件屬性)
class 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) |
3、通過例項(物件)去修改類屬性
classPeople(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) |
總結
如果需要在類外修改類屬性,必須通過類物件去引用然後進行修改。如果通過例項物件去引用,會產生一個同名的例項屬性,這種方式修改的是例項屬性,不會影響到類屬性,並且之後如果通過例項物件去引用該名稱的屬性,例項屬性會強制遮蔽掉類屬性,即引用的是例項屬性,除非刪除了該例項屬性。
屬性叫法 |
變數叫法 |
描述 |
類屬性(私有和公有) |
類變數 |
所有物件共享同一份類屬性。 |
例項屬性(私/公) |
成員變數 |
每個不同物件,有不一樣值的例項屬性 |