python中属性和方法的动态绑定
# 定义一个类
class Student(object):
pass
# 实例化一个对象
s = Student()
# 给这个对象绑定一个属性name
s.name = 'John'
print(s.name)
John
# 定义一个方法
def set_age(self, age):
self.age = age
# 导入模块
from types import MethodType
#给s这个对象绑定一个set_age的方法
s.set_age = MethodType(set_age, s)
s.set_age = 30
s.age
25
# 给实例对象绑定的方法只对该实例有效。
# 给所有的实例绑定方法的做法是给类绑定方法
def set_score(self, score):
self.score = score
Student.set_score = MethodType(set_score, Student)
# 给类绑定方法后,所有实例均可调用
python中的__slots__变量
__slots__变量的作用就是限制该类实例能添加的属性:
class Student(object):
__slots__ = ('name', 'age')
在创建Student实例的时候只能动态绑定name和age这两个属性。
__slots__定义的属性仅对当前类实例起作用,对继承的子类不起作用。
相关文章