自由组装和MethodType
自由组装方法到类:
python中函数名可以当变量使用
定义好方法后, 可以将方法名传入一个自定义变量, 通过调用这个自定义变量调用该方法(类似lamada表达式的功能)。
由此也可以将方法名传入一个类中的变量, 从而使得该类拥有该方法,可以正常调用。
但是自由组装存在一个问题: 实例并不能组装, 因为方法中至少存在一个变量self, 如果方法绑定实例, 实例调用方法后会报无参数传入的错(不是在类中不会自动传入)。
可以用MethodType将方法绑定到类/实例
可以用MethodType将方法绑定到类/实例,并不是将这个方法直接写到类内部,而是在内存中创建一个link指向外部的方法,在创建实例的时候这个link也会被复制。
#导入MethodType
from types import MethodType
class Student(object):
pass
#组装方法
def set_name(self, name):
self.name = name
s1 = Student()
#依次传入方法名, 实例, 类名 完成实例绑定方法
s1.set_name = MethodType(set_name, s1, Student)
网友评论