在另一个Python类中使用无绑定方法
我有一个没有绑定到任何对象的方法,叫做 <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
如果你想实现“类方法”,那么你应该直接调用它,而不需要创建对象实例。
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/ 复制过来的)
如果你想要实例方法,可以使用继承。
11
如果你想把同一个方法添加到几个没有关系的类里(比如做面向切面编程),不要直接从其中一个类复制一个不绑定的方法。相反,你应该定义一个普通的函数,然后把它作为方法分配给每个类。
通常,更好的做法是使用混入(就是普通的继承)或者元类(类装饰器的语法看起来很不错)。
如果你真的想从一个你无法控制的类里偷一个方法,你可以从“不绑定的方法”包装器中提取出来:foo2.ops.im_func
;这其实是一个普通的函数,你可以把它作为方法分配给另一个类。