Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 元组中的方法需要显式的“self”参数_Python - Fatal编程技术网

Python 元组中的方法需要显式的“self”参数

Python 元组中的方法需要显式的“self”参数,python,Python,我想了解此代码的工作原理: 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() 因为它需要一个参数

我想了解此代码的工作原理:

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)


与前一种情况不同,
self.ff[0]==self.f

您可以在打印类成员时看到差异

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

>>> MyClass.ff
<unbound method MyClass.f>
>>> MyClass().ff
<bound method MyClass.f of <__main__.MyClass object at 0x7f53>>
>>MyClass.ff
>>>MyClass().ff
在第二个示例中,该函数用作普通函数:

>>> MyClass.ff[0]
<function f at 0x7f54>
>>> MyClass().ff[0]
<function f at 0x7f54>
>MyClass.ff[0]
>>>MyClass().ff[0]

我不是100%确定,但方法是属于类的函数。在第二个示例中,ff是一个元组,而不是一个函数,ff[0]不是MyClass的成员。这只是一个函数。为什么
ff[0]
不是该类的成员?这是一个更好的标题吗?这是一个有趣的问题,谢谢!让我们转移一下问题:为什么在第二种情况下
MyClass.ff[0]!=出于同样的原因,MyClass.f
@RuggeroTurra
MyClass.ff[0]
是一个函数,而
MyClass.f
是一个包装此函数的未绑定方法。
>>> MyClass.ff[0]
<function f at 0x7f54>
>>> MyClass().ff[0]
<function f at 0x7f54>