__slots__ 呢是爲了來限制class屬性的,我們知道,當我們創建一個實例的時候可以來給他增加一些屬性或者方法,但是如果我們想要限制class的屬性,只允許它有特定的屬性的時候就用到__slots__ 了。
舉例說明:
class Student(object):
__slots__ = ('name', 'age')#用tuple定義允許綁定的屬性名稱
這樣我們就只能使用name 和age屬性了
>>> 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'
注意⚠️
這個只有在本類中有效,如果他作爲父類的話,那麼子類用的時候不會有此限制,如果想讓子類有此限制,那麼就需要在子類中重新定義。那麼子類中允許定義的屬性就是子類的加上父類的。