我有一个读取字符串的类,并对字符串的每个字符执行特定的操作。我希望我的类能够提供自定义操作来扩展其功能。为了做到这一点,我想让用户提供的函数成为我的类的有界方法,以便我可以像这样循环字符串;
for x in self.string:
getattr(self, self.actions[x])()
我尝试过为我的类创建新的绑定(bind)方法:
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'
如何将常规函数转换为绑定(bind)方法?
最佳答案
这是您需要锁定类以使其绑定(bind)的东西,而不是类的实例。如果您只想逐个实例地执行此操作,则必须使用 types.MethodType
。请参阅:https://filippo.io/instance-monkey-patching-in-python/
不过,很可能有更好的方法来完成您想做的事情。 Python 中的猴子修补在 99% 的情况下被认为是非常糟糕的模式。
关于python - 如何使函数成为绑定(bind)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24770498/