因爲Python是動態語言,根據類建立的實例能夠任意綁定屬性。測試
給實例綁定屬性的方法是經過實例變量,或者經過self
變量:spa
class Student(object): def __init__(self, name): self.name = name s = Student('Bob') s.score = 90
可是,若是Student
類自己須要綁定一個屬性呢?能夠直接在class中定義屬性,這種屬性是類屬性,歸Student
類全部:code
class Student(object): name = 'Student'
當咱們定義了一個類屬性後,這個屬性雖然歸類全部,但類的全部實例均可以訪問到。來測試一下:blog
>>> class Student(object): ... name = 'Student' ... >>> s = Student() # 建立實例s >>> print(s.name) # 打印name屬性,由於實例並無name屬性,因此會繼續查找class的name屬性 Student >>> print(Student.name) # 打印類的name屬性 Student >>> s.name = 'Michael' # 給實例綁定name屬性 >>> print(s.name) # 因爲實例屬性優先級比類屬性高,所以,它會屏蔽掉類的name屬性 Michael >>> print(Student.name) # 可是類屬性並未消失,用Student.name仍然能夠訪問 Student >>> del s.name # 若是刪除實例的name屬性 >>> print(s.name) # 再次調用s.name,因爲實例的name屬性沒有找到,類的name屬性就顯示出來了 Student
從上面的例子能夠看出,在編寫程序的時候,千萬不要對實例屬性和類屬性使用相同的名字,由於相同名稱的實例屬性將屏蔽掉類屬性,可是當你刪除實例屬性後,再使用相同的名稱,訪問到的將是類屬性。it