setattr函数官方的解释是 用于设置属性值,该属性不一定是存在的。
其实它还可以为类设置 方法/函数
setattr([类名称], [需要创建的方法名],[方法的引用-方法所在的内存地址])
示例:下面示例为a类创建了一个类变量cc和类方法dd
class a():name = "我是name值"def bb(self):print("我是bb方法")def make_def():def tool(self):print("我是make——def方法")return tooldef make_a():# 给a类创建一个类属性叫 cc 值为 sssssetattr(a, "cc", "ssssss")# 给a类创建一个类方法 叫dd 实际为 setattr(a, "dd", make_def())# 测试make_a()print(a().cc)aa = a()a().dd()
运行结果:
通过测试,我们可以看出在a类中,是有一个类方法叫做dd的,dd是从make_def中复制过来的 (而不是引用);通过下面测试可以证明,修改原方法make_def的__doc__属性后,复制函数dd的__doc__不随着改变,说明是直接复制值到新函数,不是内存地址引用