【问题标题】:How to make a function a bound method如何使函数成为绑定方法
【发布时间】:2014-07-16 00:51:56
【问题描述】:

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

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'

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

【问题讨论】:

    标签: python oop python-3.x


    【解决方案1】:

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

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

    【讨论】:

    • 虽然没有像“通常你不想这样做”这样的警告,关于如何进行猴子修补的解释是不完整的。
    猜你喜欢
    • 2016-05-21
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 2018-06-28
    • 2011-06-23
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多