我有一个读取字符串的类,对于字符串的每个字符,执行某个操作。我希望我的课程能够提供自定义操作来扩展它的功能。为了做到这一点,我想让用户提供的函数成为我的类的有界方法,这样我就可以像这样循环字符串;
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'
如何将常规函数转换为绑定方法?
答案 0 :(得分:2)
这是你想要锁定类以使其绑定的东西,而不是类的实例。如果您只想在逐个实例的基础上执行此操作,则必须使用types.MethodType
。请参阅:https://filippo.io/instance-monkey-patching-in-python/
尽管如此,很有可能有更好的方法来完成你想做的事情。在99%的情况下,Python中的猴子修补被认为是一种非常糟糕的模式。