如何使函数成为绑定方法

时间:2014-07-16 00:51:57

标签: python oop python-3.x

我有一个读取字符串的类,对于字符串的每个字符,执行某个操作。我希望我的课程能够提供自定义操作来扩展它的功能。为了做到这一点,我想让用户提供的函数成为我的类的有界方法,这样我就可以像这样循环字符串;

for x in self.string:
    getattr(self, self.actions[x])()

我试过这个为我的班级制作新的绑定方法:

class myclass(object):

    def __init__(self, additional_actions={}):
        self.thing = "value"
        for k,v in additional_actions.items():
            setattr(self,k,v)


def dummy(self):
    print(self.thing)

mydic = {"awesome":dummy}

a = myclass(mydic)
a.awesome()

然而,我收到此错误:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    a.awesome()
TypeError: dummy() missing 1 required positional argument: 'self'

如何将常规函数转换为绑定方法?

1 个答案:

答案 0 :(得分:2)

这是你想要锁定类以使其绑定的东西,而不是类的实例。如果您只想在逐个实例的基础上执行此操作,则必须使用types.MethodType。请参阅:https://filippo.io/instance-monkey-patching-in-python/

尽管如此,很有可能有更好的方法来完成你想做的事情。在99%的情况下,Python中的猴子修补被认为是一种非常糟糕的模式。