猿问

TypeError:method()接受一个位置参数,但给出了2个

TypeError:method()接受一个位置参数,但给出了2个

如果我有课.。

class MyClass:

    def method(arg):
        print(arg)

..我用它来创建一个对象.。

my_object = MyClass()

..我打电话给你method("foo")就像这样.。

>>> my_object.method("foo")Traceback (most recent call last):File "<stdin>", line 1, in <module>TypeError: 
method() takes exactly 1 positional argument (2 given)

..为什么Python告诉我给了它两个论点,而我只给了一个呢?


哔哔one
浏览 1157回答 3
3回答

翻阅古今

在Python中,这是:my_object.method("foo")..是句法糖,翻译在幕后将其翻译为:MyClass.method(my_object,&nbsp;"foo")..正如您所看到的,它确实有两个参数-从调用方的角度来看,第一个参数是隐式的。这是因为大多数方法都对调用的对象做了一些工作,因此需要有某种方法来在方法中引用该对象。按照惯例,第一个参数称为self在方法定义中:class&nbsp;MyNewClass: &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;method(self,&nbsp;arg): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(self) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(arg)如果你打电话method("foo")关于…的一个例子MyNewClass,如预期的那样运作:>>>&nbsp;my_new_object&nbsp;=&nbsp;MyNewClass()>>>&nbsp;my_new_object.method("foo")<__main__.MyNewClass&nbsp;object&nbsp;at&nbsp;0x29045d0>foo偶尔(但不经常),你真的别关心方法绑定到的对象,在这种情况下,您可以装饰内建法staticmethod()职能是这样说的:class&nbsp;MyOtherClass: &nbsp;&nbsp;&nbsp;&nbsp;@staticmethod &nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;method(arg): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(arg)..在这种情况下,不需要添加self方法定义的参数,它仍然有效:>>>&nbsp;my_other_object&nbsp;=&nbsp;MyOtherClass()>>>&nbsp;my_other_object.method("foo") foo
随时随地看视频慕课网APP

相关分类

Python
我要回答