Python 模,class,方法基础

Python module, class, method basicks

我是 python 的新手,我经历过奇怪的行为。我有两个文件:foo.py 和 test.py

test.py:

from foo import Foo
f = Foo()
f.bar(1)

当我的 foo.py 看起来像这样时:

class Foo:
    def bar(n):
        print n

我收到错误消息:

Traceback (most recent call last):
File "test.py", line 3, in <module>
f.bar(1)
TypeError: bar() takes exactly 1 argument (2 given)

当我的 foo.py 看起来像这样时:

class Foo:
    def bar(x,n):
        print n

我得到结果:

1

这是为什么?为什么我需要声明两个参数,即使我想要一个只需要一个参数的方法?谢谢

方法中的第一个参数应该是调用该方法的对象。也就是说,当您调用 f.foo(1) 时,这意味着将使用参数 foo(f, 1) 调用 foo。通常调用 self 的第一个参数,但 python 不关心名称,您的第二个示例对象 f 将通过 x 参数发送。

原因是因为Python期望第一个参数是调用函数的对象。如果您熟悉 C++ 或 Java,它类似于 "this" 关键字。只是 Python 更特别的是你显式声明它而不是隐式声明。标准编码约定建议您使用 "self" 作为第一个参数,但您可以使用任何真正的参数。

在你的例子中,

from foo import Foo
f = Foo()
f.bar(1)

当你调用class Foo 中的函数bar 时,它可以被调用为Foo.bar(f,n) 或f.bar(n)。在这里,self 是 'f' 或指代调用 class.

的当前对象

我建议看一下 Why explicit self has to stay 以便更清楚地理解。