首页 > 解决方案 > 如何使用 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'

我究竟做错了什么?

标签: pythonpython-3.x

解决方案


使用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

推荐阅读