python版本:3.6
1.语法:
MethodType(Callable, object)
2.使用实例
2.1.把方法绑定到类的实例中,此时方法在类实例间不共享
from types import MethodType
class Student(object):
pass
def set_name(self, name):
self.name = name
s1 = Student()
s2 = Student()
#方法绑定到s1实例的set_name_func 属性上
s1.set_name_func = MethodType(set_name, s1)
#调用方法
s1.set_name_func('s1')
print(s1.name)
s2.set_name_func('s2')#会报错,因为set_name方法在实例间不共享
print(s2.name)
output:
s1
AttributeError: 'Student' object has no attribute 'set_name_func'
2.2.把方法绑定到类中,此时方法为类方法,操作的属性也变成类属性
from types import MethodType
class Student(object):
pass
def set_name(cls, name):
cls.name = name
s1 = Student()
s2 = Student()
s3 = Student()
# 将方法绑定到类上,此时方法为类方法,操作的属性也变成类属性
Student.set_name_func= MethodType(set_name, Student)
#s1,s2均可调用set_name_func方法,说明此时方法为类方法
s1.set_name_func('s1')
s2.set_name_func('s2')
#s3有name属性,且值为2,说明此时属性为类属性
print(s1.name)
print(s2.name)
print(s3.name)
output:
2
2
2
参考: