Method in tuple requires explicit `self` argument

I want to understand why this code works:

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

MyClass().g()

while this doesn't:

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

MyClass().g()

since it needs an argument self.ff[0](self) :

TypeError: f() takes exactly 1 argument (0 given)

Is not self.ff[0] == self.f as in the previous case self.ff == self.f ?


You can see the difference when printing the member of your class.

For your first example you'll find that the function is wrapped to a (un)bound method which handles the self parameter for you:

>>> MyClass.ff
<unbound method MyClass.f>
>>> MyClass().ff
<bound method MyClass.f of <__main__.MyClass object at 0x7f53>>

while in your second example the function is used as a normal function:

>>> MyClass.ff[0]
<function f at 0x7f54>
>>> MyClass().ff[0]
<function f at 0x7f54>
链接地址: http://www.djcxy.com/p/31924.html

上一篇: 我如何结合这两个查询来计算排名变化?

下一篇: 元组中的方法需要明确的`self`参数