__slots__
現在我們終於明白了,動態語言與靜態語言的不同
動態語言:可以在執行的過程中,修改程式碼
靜態語言:編譯時已經確定好程式碼,執行過程中不能修改
如果我們想要限制例項的屬性怎麼辦?比如,只允許對Person例項新增name和age屬性
為了達到限制的目的,Python允許在定義class的時候,定義一個特殊的__slots__變數,來限制該class例項能新增的屬性:
>>> class Person(object):
__slots__ = (“name”, “age”)
>>> P = Person()
>>> P。name = “老王”
>>> P。age = 20
>>> P。score = 100
Traceback (most recent call last):
File “
AttributeError: Person instance has no attribute ‘score’
>>>
注意:
使用__slots__要注意,__slots__定義的屬性僅對當前類例項起作用,對繼承的子類是不起作用的
In [67]: class Test(Person):
。。。: pass
In [68]: t = Test()
In [69]: t。score = 10