上一篇文章為:→1.1.2python是動(dòng)態(tài)語(yǔ)言
slots
現(xiàn)在我們終于明白了,動(dòng)態(tài)語(yǔ)言與靜態(tài)語(yǔ)言的不同
動(dòng)態(tài)語(yǔ)言:可以在運(yùn)行的過(guò)程中,修改代碼
靜態(tài)語(yǔ)言:編譯時(shí)已經(jīng)確定好代碼,運(yùn)行過(guò)程中不能修改
如果我們想要限制實(shí)例的屬性怎么辦?比如,只允許對(duì)Person實(shí)例添加name和age屬性。
為了達(dá)到限制的目的,Python允許在定義class的時(shí)候,定義一個(gè)特殊的slots變量,來(lái)限制該class實(shí)例能添加的屬性:
>>> class Person(object):
__slots__ = ("name", "age")
>>> P = Person()
>>> P.name = "老王"
>>> P.age = 20
>>> P.score = 100
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
AttributeError: Person instance has no attribute 'score'
>>>
注意:
- 使用slots要注意,slots定義的屬性?xún)H對(duì)當(dāng)前類(lèi)實(shí)例起作用,對(duì)繼承的子類(lèi)是不起作用的
In [67]: class Test(Person):
...: pass
...:
In [68]: t = Test()
In [69]: t.score = 100