我有一个未绑定的方法<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)
答案 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/复制粘贴)
如果你想要实例方法,请使用继承