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`参数