为了达到限制实例属性的目的,可以使用一个特殊的变量__slots__ 来限制实例性:
class Student(object):
__slots__ = ('name','age') #允许绑定的属性名称
>>> 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: 'Student' object has no attribute 'score'
注意 __slots__定义的属性只对当前的类中的实例起作用,对继承的子类不起作用
class Student(object):
def get_score(self):
return self._score
def set_score(self, value):
if not isinstance(score,int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
尝试给实例绑定一个方法
from types import MethodType
s.set_age = MethodType(set_age,s) #给实例绑定一个方法