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

时间:2011-04-18 09:57:25

标签: python methods

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

class foo2(object):
  pass

foo2.ops = foo.ops

然而

obj = foo2()
obj.ops()

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

2 个答案:

答案 0 :(得分:11)

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

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

如果您从一个类(例如您无法控制的方法)中窃取方法,那么您可以从“未绑定方法”包装器中提取它:foo2.ops.im_func;它是一个简单的函数,你可以将它作为一个方法分配给另一个类。

答案 1 :(得分:0)

如果你想实现'类方法',你应该相应地调用它,而不是对象实例

class foo:
    @staticmethod
    def ops(name):
        print "Hi there",name

foo.ops("Peter")

class foo2:
    pass

foo2.ops = staticmethod(foo.ops)

foo2.ops('aa')

(从http://code.activestate.com/recipes/52304-static-methods-aka-class-methods-in-python/复制粘贴)

如果你想要实例方法,请使用继承