Python模块,类,方法basicks

时间:2015-08-26 12:42:11

标签: python class methods module

我是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

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

原因是因为Python期望第一个参数是调用函数的对象。如果您熟悉C ++或Java,它类似于&#34;这个&#34;关键词。只是Python更特别的是你明确地声明了这个而不是隐式地。标准编码惯例建议您使用&#34; self&#34;作为第一个参数,但你可以使用任何真的。

在您的示例中,

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

当你调用Foo类中的函数栏时,它可以被称为Foo.bar(f,n)或f.bar(n)。在这里,自我是&#39; f&#39;或引用调用该类的当前对象。

我建议您查看Why explicit self has to stay以获得更清晰的理解。