首頁 >後端開發 >Python教學 >python裡的__slots__能做什麼? (實例解析)

python裡的__slots__能做什麼? (實例解析)

乌拉乌拉~
乌拉乌拉~原創
2018-08-22 17:06:531339瀏覽

在這篇文章之中我們來了解一下關於python__slots__的相關知識,有些朋友可能是剛接觸到python這一程式語言,對這一方面不是特別的了解,在接下來這篇文章將會來帶大家來了解python__slots__的相關知識。

如果我們想要限制實例的屬性呢?例如,只允許對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: &#39;Student&#39; object has no attribute &#39;score&#39;

由於'score'沒有被放到__slots__中,所以不能綁定score屬性,試圖綁定score將得到AttributeError的錯誤。

使用__slots__要注意,__slots__定義的屬性僅對當前類別實例起作用,對繼承的子類別是不起作用的:

>>> class GraduateStudent(Student):
...     pass
...
>>> g = GraduateStudent()
>>> g.score = 9999

除非在子類別中也定義__slots__,這樣,子類別實例允許定義的屬性就是自身的__slots__加上父類別的__slots__。

以上就是本篇文章所講述的所有內容,這篇文章主要介紹了python__slots__的相關知識,希望你能藉助資料從而理解上述所說的內容。希望我在這片文章所講述的內容能夠對你有幫助,讓你學習python更加輕鬆。

更多相關知識,請造訪php中文網Python教學欄位。

以上是python裡的__slots__能做什麼? (實例解析)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn