我是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
为什么?为什么我需要声明两个参数,即使我想要只有一个方法?谢谢
答案 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以获得更清晰的理解。