Python模块、类、方法基础

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):

我对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):
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
。见问题。