1、给类或实例动态绑定属性和方法
我们在定义完一个类之后,若不想修改源代码,可以动态绑定一些属性和方法:
class Student(Object):
pass
s = Student()
s.name ="jj";#给一个实例绑定一个属性
def set_age(self,age):
self.age = age
from type import MethodType
s.set_age = MethodType(set_age,s)#给实例绑定一个方法
s.set_age(15)#调用该函数
给一个实例绑定的方法,对另一个实例来说,是不起作用的,例如下面的代码是错误的:
s2 = Student()
s2.set_age(16)
给class绑定方法后,所有的实例都可以去调用该方法:
Student.set_age = set_age
2、slots函数
想要限制实例的属性怎么办?比如,只允许对Student实例添加name和age属性:
class Student(object):
__slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称
测试一下:
>>> s = Student() # 创建新的实例
>>> s.name = 'Michael' # 绑定属性'name'
>>> s.age = 25 # 绑定属性'age'
>>> s.