[英]How to define a custom function of an instance using setattr
我试图动态地向类添加方法,但是我一直遇到一个错误,即self
未传递给新函数。 例如:
class Dummy():
def say_hi(self):
print("hi")
def new_method(self):
print("bye")
dummy = Dummy()
setattr(dummy, "say_bye", new_method)
dummy.say_bye()
导致以下错误:
Traceback (most recent call last):
File "main.py", line 13, in <module>
dummy.say_bye()
TypeError: new_method() missing 1 required positional argument: 'self'
我究竟做错了什么?
使用types.MethodType
功能:
from types import MethodType
class Dummy():
def say_hi(self):
print("hi")
def new_method(self):
print("bye")
dummy = Dummy()
dummy.say_bye = MethodType(new_method, dummy)
dummy.say_bye() # bye
您正在将函数new_method
设置为dummy
对象的属性。
如果您进行print(dummy.__dict__)
,则会看到类似以下内容:
{'say_bye': <function new_method at 0x7fcd949af668>}
这意味着您的dummy
对象具有new_method
函数作为属性,因此当您执行dummy.say_bye()
,您将调用具有作为属性的函数而没有任何参数。
它不是Dummy
类的函数,而只是您的dummy
对象具有的函数。
您可以使用RomanPerekhrest的答案来实现所需的功能。
希望能帮助到你。
干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.