python - 如何使用 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
推荐阅读
- .net - 我们可以将 WEBSITE_LOAD_USER_PROFILE=1 添加到 web.config
- azure-devops - Azure DevOps:将团队成员添加到新团队/区域
- python - 错误 NOT NULL 约束失败:使用 3 个模型(外键)自定义表单 django-all-auth
- c - gcc-10.0.1 特定的段错误
- java - 从 SwingWorker 调用 done 方法时是否必须使用 Runnable.run
- java - 如何在for循环中向空字符串添加值?
- android - 出现错误说 - “条目名称 'res/layout/test_toolbar.xml' 碰撞”,同时创建签名的 apk
- java - MappedByteBuffer(在 Android Studio 中)构造函数损坏(超级构造函数损坏)
- google-cloud-firestore - 了解 Firebase Cloud Firestore 计费
- python - 如何将 csv 文件格式加载到 jupyter notebook?