1. 程式人生 > >自學Python day6--------面向物件程式設計(例項屬性和類屬性)

自學Python day6--------面向物件程式設計(例項屬性和類屬性)

因為Python是動態語言,可以根據例項任意繫結屬性,如:

class Student(object):
    def __init__(self, name):
        self.name = name

s = Student('Bob')
s.score = 90

但是,如果Student類本身需要繫結一個屬性呢?可以直接在class中定義屬性,這種屬性是類屬性,歸Student類所有:

class Student(object):
    name = 'Student'

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

從上面的例子可以看出,在編寫程式的時候,千萬不要把例項屬性和類屬性使用相同的名字,因為相同名稱的例項屬性將遮蔽掉類屬性,但是當你刪除例項屬性後,再使用相同的名稱,訪問到的將是類屬性。