(2018-04-06.Python從Zero到One)一、python高級(jí)編程__1.1.3__slots__

上一篇文章為:→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

下一篇文章為:→1.1.4生成器
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容