gpt4 book ai didi

python - 类型错误 : method() takes 1 positional argument but 2 were given

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:13 24 4
gpt4 key购买 nike

如果我有课...

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 告诉我我给了它两个参数,而我只给了一个?

最佳答案

在 Python 中,这个:

my_object.method("foo")

... 是 syntactic sugar ,口译员在幕后将其翻译成:

MyClass.method(my_object, "foo")

...如您所见,它确实有两个参数 - 只是第一个参数是隐式的,从调用者的角度来看。

这是因为大多数方法都会对调用它们的对象进行一些操作,因此需要某种方式在方法内部引用该对象。按照惯例,第一个参数在方法定义中称为 self:

class MyNewClass:

def method(self, arg):
print(self)
print(arg)

如果您在 MyNewClass 的实例上调用 method("foo"),它会按预期工作:

>>> my_new_object = MyNewClass()
>>> my_new_object.method("foo")
<__main__.MyNewClass object at 0x29045d0>
foo

偶尔(但不经常),你真的关心你的方法绑定(bind)到的对象,在那种情况下,你可以decorate内置 staticmethod() 的方法函数这样说:

class MyOtherClass:

@staticmethod
def method(arg):
print(arg)

...在这种情况下,您不需要向方法定义中添加 self 参数,它仍然有效:

>>> my_other_object = MyOtherClass()
>>> my_other_object.method("foo")
foo

关于python - 类型错误 : method() takes 1 positional argument but 2 were given,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41485488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com