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 以便更清楚地理解。
我是 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 以便更清楚地理解。