python - 如何使函数成为绑定(bind)方法

标签 python oop python-3.x

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

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/

相关文章:

python - 对数据 Pandas 进行操作

c++ - *nix 下非 GUI 应用程序的体面事件库是什么? (C++)

Java 队列定时器

python-3.x - 使用influxdb-python的Influxdb批量插入

python - 爬虫对象与蜘蛛、管道对象有什么关系?

python - 是什么导致 "elasticsearch.exceptions.ConnectionError: ConnectionError ... error(' getaddrinfo() argument 2 must be integer or string',)))

python - 从 python 中的列表列表中删除列表项

c++ - 取消引用指向其类内对象的指针

python - Pandas 的均值归一化

python - 将两个 df 和 tag 与列名匹配