python:實例屬性和類屬性

因爲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

相關文章
相關標籤/搜索