在另一个python类中使用未绑定的方法

sha*_*haz 3 python methods

我有一个未绑定的方法<unbound method foo.ops>,我想与另一个类使用相同的方法.举个例子

class foo2(object):
  pass

foo2.ops = foo.ops
Run Code Online (Sandbox Code Playgroud)

然而

obj = foo2()
obj.ops()

raises TypeError: unbound method ops() must be called with foo instance as first argument (got nothing instead)
Run Code Online (Sandbox Code Playgroud)

900*_*000 11

如果要将相同的方法添加到多个不相关的类(例如,执行AOP),请不要从其中一个中复制未绑定的方法.相反,定义一个普通函数并将其作为方法分配给每个类.

通常更好的方法是使用mixin(使用普通继承)或元类(类装饰器语法很整洁).

如果你是地狱,势必从偷类的方法(例如,你不控制),你可以从"绑定方法"包装提取它:foo2.ops.im_func; 它是一个简单的函数,你可以将它作为一个方法分配给另一个类.