我有一个未绑定的方法<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; 它是一个简单的函数,你可以将它作为一个方法分配给另一个类.