使用 __slots__

使用 __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__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的

你可能感兴趣的:(使用 __slots__)