使用 __slots__
创建一个类的实例后,可以给实例绑定任何属性和方法,
给一个实例绑定属性和方法,对另外一个实例是不起作用的。这时候给类绑定方法,然后该方法对所有实例都有效。
比如说:
class Person(object):
def __init__(self, money):
self.money = money
def rmb():
print('I have money')
a = Person()创建一个实例
fromtype importMethodType
a.rmb = MethodType(rmb, a)#给a绑定一个rmb()方法
a.rmb()#输出I have money
b = Person()创建另一个实例
b.rmb()#输出错误信息AttributeError b对象没有rmb的方法
Person.rmb() = rmb()#给类添加rmb方法
a.rmb()和b.rmb()#现在所有实例都输出:I have money
__slots__ (限制实例的属性)
如果我们想要限制实例的属性怎么办?比如,只允许对Student实例添加name和age属性。
为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性:
class Student(object):
__slots__ = ('name', 'age')#用tuple定义允许绑定的属性名称
使用__slots__要注意,__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的