首页 >后端开发 >Python教程 >为什么即使有一个显式参数也会出现'TypeError: method()takes 1positional argument but 2 were given 2”?

为什么即使有一个显式参数也会出现'TypeError: method()takes 1positional argument but 2 were given 2”?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-30 13:25:10567浏览

Why Does

“TypeError:method() 需要 1 个位置参数,但给出了 2 个位置参数”,仅传递了一个参数

遇到错误“TypeError”时: method() 需要 1 个位置参数,但给出了 2 个”尽管只传递了一个参数,但理解 Python 的方法调用很重要约定。

在 Python 中,方法调用是更详细语法的语法糖。当调用对象上的方法时,语言会将调用转换为更明确的形式,其中对象成为方法的第一个参数。

例如,以下调用:

my_object.method("foo")

在幕后被翻译成:

MyClass.method(my_object, "foo")

这里,第一个参数(my_object)在方法定义中被称为 self 参数。此参数表示调用该方法的对象。

在大多数情况下,方法需要访问它们所调用的对象。但有时,您可能需要一个不依赖于它所绑定的对象的方法。在这种情况下,你可以使用 Python 的 staticmethod() 函数来修饰方法:

class MyOtherClass:

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

用 staticmethod() 修饰方法就不需要 self 参数,可以直接调用方法而无需引用对象:

my_other_object.method("foo")

这澄清了为什么您遇到的错误表明提供了两个参数。 Python 将您调用方法的对象(例如原始示例中的 my_object)解释为隐式第一个参数,从而导致总共传递两个参数。

以上是为什么即使有一个显式参数也会出现'TypeError: method()takes 1positional argument but 2 were given 2”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn