python setattr方法动态为类创建方法

本文详细介绍了Python内置函数setattr的作用,它不仅能够设置已有类的属性值,还能为类动态添加方法。通过示例代码展示了如何使用setattr为类a创建类变量cc和类方法dd,并探讨了方法复制的特性,即被赋值的方法并非引用,而是复制了一份。当修改原方法的属性时,新方法的属性不会随之改变,证明了setattr确实实现了值的复制而非引用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

setattr函数官方的解释是 用于设置属性值,该属性不一定是存在的。
其实它还可以为类设置 方法/函数

使用方法:

	setattr([类名称], [需要创建的方法名],[方法的引用-方法所在的内存地址])

示例:

下面示例为a类创建了一个类变量cc和类方法dd
class a():
	name = "我是name值"

	def bb(self):
		print("我是bb方法")

def make_def():
	def tool(self):
		print("我是make——def方法")
	return tool
def make_a():
	# 给a类创建一个类属性叫 cc 值为 ssss
	setattr(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__不随着改变,说明是直接复制值到新函数,不是内存地址引用
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值