2020-12-09
Python類的__slots__方法
由於Python是動態語言,任何例項在執行期都可以動態地新增屬性。比如:
class Student(object):
def init(self, name, gender, score):
self.name = name
self.gender = gender
self.score = score
此時,Student類有三個屬性,name、gender、score,由於是動態語言,在執行時,可以隨意新增屬性。
student = Student(‘Bob’, ‘Male’, 99)
student.age = 12 # ==> 動態新增年齡age屬性
如果要限制新增的屬性,例如,Student類只允許新增 name、gender和score 這3個屬性,就可以利用Python的一個特殊的__slots__來實現。
class Student(object):
slots = (‘name’, ‘gender’, ‘score’)
def init(self, name, gender, score):
self.name = name
self.gender = gender
self.score = score
使用__slots__ = (‘name’, ‘gender’, ‘score’) 限定Student類的屬性,這個時候在外部再次新增動態屬性age,將會報錯。
student = Student(‘Bob’, ‘Male’, 99)
student.age = 12 # ==> 動態新增年齡age屬性
Traceback (most recent call last):
AttributeError: ‘Student’ object has no attribute ‘age’
__slots__的目的是限制當前類所能擁有的屬性,避免因為外部屬性的操作導致類屬性越來越難以管理。