Python模块、类、方法基础
我对python完全陌生,对我来说,我经历过奇怪的行为。我有两个文件:foo.py和test.py test.py:Python模块、类、方法基础,python,class,methods,module,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 class Foo: def bar(x,n): print n 我收到错误消息: Traceback (most recent call last):
from foo import Foo
f = Foo()
f.bar(1)
当我的foo.py看起来像这样时:
class Foo:
def bar(n):
print n
class Foo:
def bar(x,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)
我得到的结果是:
1
为什么呢?为什么我需要声明两个参数,即使我想要一个只需要一个参数的方法?谢谢方法中的第一个参数应该是调用该方法的对象。也就是说,当您调用
f.foo(1)
时,这意味着foo
将使用参数foo(f,1)
进行调用。通常,调用self的第一个参数,但是python不关心名称,第二个示例中,对象f
将通过x
参数发送。方法中的第一个参数应该是调用该方法的对象。也就是说,当您调用f.foo(1)
时,这意味着foo
将使用参数foo(f,1)
进行调用。通常,调用self的第一个参数,但是python不关心名称,第二个示例中的对象f
将通过x
参数发送。原因是python希望第一个参数是调用函数的对象。如果你熟悉C++或java,它类似于“这个”关键字。只是Python更为特殊,您可以显式地声明它,而不是隐式地声明它。标准编码惯例建议您使用“self”作为第一个参数,但您可以使用任何真正的参数
以你为例,
from foo import Foo
f = Foo()
f.bar(1)
当调用类Foo中的函数栏时,可以将其称为Foo.bar(f,n)或f.bar(n)。在这里,self是“f”或指调用该类的当前对象
我建议看一看以便更清楚地理解。原因是Python希望第一个参数是调用函数的object。如果你熟悉C++或java,它类似于“这个”关键字。只是Python更为特殊,您可以显式地声明它,而不是隐式地声明它。标准编码惯例建议您使用“self”作为第一个参数,但您可以使用任何真正的参数 以你为例,
from foo import Foo
f = Foo()
f.bar(1)
当调用类Foo中的函数栏时,可以将其称为Foo.bar(f,n)或f.bar(n)。在这里,self是“f”或指调用该类的当前对象
我建议看一看以便更清楚地理解。修复缩进。然后阅读一些基本的Python文档,这些文档应该能够充分解决这个问题。实例方法的第一个参数是对象本身。请参阅官方文档:声明方法时,第一个参数是对类实例的引用,这通常称为
self
。请参阅Stackoverflow问题。修复缩进。然后阅读一些基本的Python文档,这些文档应该能够充分解决这个问题。实例方法的第一个参数是对象本身。请参阅官方文档:声明方法时,第一个参数是对类实例的引用,这通常称为self
。见问题。