class中限定綁定屬性__slots__方法

使用__slots__
可是,若是咱們想要限制class的屬性怎麼辦?好比,只容許對Student實例添加name和age屬性。
爲了達到限制的目的,Python容許在定義class的時候,定義一個特殊的__slots__變量,來限制該class能添加的屬性:
 class Student(object):
     __slots__ = ('name', 'age') # 用tuple定義容許綁定的屬性名稱
而後,咱們試試:
s = Student() # 建立新的實例
s.name = 'Michael' # 綁定屬性'name'
s.age = 25 # 綁定屬性'age'
s.score = 99 # 綁定屬性'score'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute 'score'
因爲'score'沒有被放到__slots__中,因此不能綁定score屬性,試圖綁定score將獲得AttributeError的錯誤。
使用__slots__要注意,__slots__定義的屬性僅對當前類起做用,對繼承的子類是不起做用的:
>>> class GraduateStudent(Student):
...     pass
...
>>> g = GraduateStudent()
>>> g.score = 9999
除非在子類中也定義__slots__,這樣,子類容許定義的屬性就是自身的__slots__加上父類的__slots__。繼承

相關文章
相關標籤/搜索