我想了解此代码的工作原理:
class MyClass(object):
def f(self): print "Hello"
ff = f
def g(self): self.ff()
MyClass().g()
虽然没有:
class MyClass(object):
def f(self): print "Hello"
ff = f,
def g(self): self.ff[0]()
MyClass().g()
因为它需要一个参数self.ff[0](self)
:
TypeError: f() takes exactly 1 argument (0 given)
与上一个案例self.ff[0] == self.f
中的self.ff == self.f
不一样吗?
答案 0 :(得分:3)
您可以在打印班级成员时看到差异。
对于你的第一个例子,你会发现函数被包装到一个(un)绑定方法,它为你处理self
参数:
>>> MyClass.ff
<unbound method MyClass.f>
>>> MyClass().ff
<bound method MyClass.f of <__main__.MyClass object at 0x7f53>>
在第二个例子中,该函数用作普通函数:
>>> MyClass.ff[0]
<function f at 0x7f54>
>>> MyClass().ff[0]
<function f at 0x7f54>