在 Python 中将方法绑定到 class 实例

Binding a method to class instance on fly in Python

class mc:
    def show(self):
        self.func()


a = mc()
def myfunc(self):
    print('instance function')
a.func = myfunc
a.show()

以上不起作用:TypeError: myfunc() missing 1 required positional argument: 'self'

考虑到我使用的是点符号,为什么 Python 没有自动插入实例名称?

它可以像这样工作,因为函数并不是真正的实例方法

class mc:
    def show(self):
         self.x = 1
         func(self)


a = mc()
def myfunc(self):
    print (self.x)
    print('instance function')
a.func = myfunc
a.show()

您可以使用 monkey patching 将方法动态添加到 class。

class mc:
    def show(self):
        self.func()

a = mc()
def myfunc(self):
    print('instance function')
mc.func = myfunc
a.show()