python方法窃取者

ʞɔı*_*ɔıu 6 python oop

我怎样才能"窃取"或将方法从一个类复制到另一个类?

示例代码:

class A(object):
  def foo(self):
    print "blah"


class B(object):
  foo = A.foo

B().foo()
Run Code Online (Sandbox Code Playgroud)

预期产量:

"blah"
Run Code Online (Sandbox Code Playgroud)

代替:

TypeError:必须使用A实例作为第一个参数调用未绑定方法foo()(没有任何内容)

mgi*_*nbr 6

用途__func__:

>>> A.foo
<unbound method A.foo>
>>> A.foo.__func__
<function foo at 0x00BC5F70>
>>> class B(object):
...   foo = A.foo.__func__
...
>>> B().foo()
"blah"
Run Code Online (Sandbox Code Playgroud)

引用文档:

实例方法对象组合了类,类实例和任何可调用对象(通常是用户定义的函数).

特殊的只读属性:__ self__是类实例对象,__ func__是函数对象; __doc__是方法的文档(与__func __.__ doc __相同); __name__是方法名称(与__func __.__ name__相同); __module__是定义方法的模块的名称,如果不可用则是None.

  • @jdotjdot`A().foo`是一个"绑定方法",与"A"的特定实例相关联.这在(可能简化的)示例中无关紧要 - 因为它不使用`self`,也可以用静态/类方法替换 - 但在更复杂的场景中它会.我假设OP的意图,虽然没有说明,是从任意类中选择一个有用的方法(即不是要继承而不是mixin)并且在他自己的类中使用相同的方法,但是指的是/根据他的班级实例 - 而不是原来的. (2认同)