創建類屬性
類是模板,而實例則是根據類創建的對象。
綁定在一個實例上的屬性不會影響其他實例,但是,類本身也是一個對象,如果在類上綁定一個屬性,則所有實例都可以訪問類的屬性,並且,所有實例訪問的類屬性都是同一個!也就是說,實例屬性每個實例各自擁有,互相獨立,而類屬性有且只有一份。
定義類屬性可以直接在 class 中定義:
class Person(object): address = 'Earth' def __init__(self, name): self.name = name
因為類屬性是直接綁定在類上的,所以,訪問類屬性不需要創建實例,就可以直接訪問:
print Person.address # => Earth
對一個實例調用類的屬性也是可以訪問的,所有實例都可以訪問到它所屬的類的屬性:
p1 = Person('Bob') p2 = Person('Alice') print p1.address # => Earth print p2.address # => Earth
由於Python是動態語言,類屬性也是可以動態添加和修改的:
Person.address = 'China' print p1.address # => 'China' print p2.address # => 'China'
因為類屬性只有一份,所以,當Person類的address改變時,所有實例訪問到的類屬性都改變了。
任務
請給 Person 類添加一個類屬性 count,每創建一個實例,count 屬性就加 1,這樣就可以統計出一共創建了多少個 Person 的實例。
代碼
class Person(object): count = 0 def __init__(self,name): self.name = name Person.count = Person.count + 1 p1 = Person('Bob') print (p1.count) p2 = Person('Alice') print (p2.count) p3 = Person('Tim') print (Person.count)
運行結果
1 2 3