元组中的方法需要显式的"self"参数

Rug*_*rra 7 python

我想了解为什么这段代码有效:

class MyClass(object):
    def f(self): print "Hello"
    ff = f
    def g(self): self.ff()

MyClass().g()
Run Code Online (Sandbox Code Playgroud)

虽然这不是:

class MyClass(object):
    def f(self): print "Hello"
    ff = f,
    def g(self): self.ff[0]()

MyClass().g()
Run Code Online (Sandbox Code Playgroud)

因为它需要一个参数self.ff[0](self):

TypeError: f() takes exactly 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)

是不是self.ff[0] == self.f像以前那样self.ff == self.f?

tyn*_*ynn 3

打印班级成员时您可以看到差异。

对于第一个示例,您会发现该函数被包装到一个(未)绑定的方法,该方法self为您处理参数:

>>> MyClass.ff
<unbound method MyClass.f>
>>> MyClass().ff
<bound method MyClass.f of <__main__.MyClass object at 0x7f53>>
Run Code Online (Sandbox Code Playgroud)

而在第二个示例中,该函数用作普通函数:

>>> MyClass.ff[0]
<function f at 0x7f54>
>>> MyClass().ff[0]
<function f at 0x7f54>
Run Code Online (Sandbox Code Playgroud)