元组中的方法需要明确的`self`参数

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

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


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

对于你的第一个例子,你会发现该函数被封装到一个(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>
链接地址: http://www.djcxy.com/p/31923.html

上一篇: Method in tuple requires explicit `self` argument

下一篇: searchBar overlapped by section header view