首页 > 后端开发 > Python教程 > 为什么我的 Python 方法会抛出'TypeError:method() 需要 1 个位置参数,但给出了 2 个”错误?

为什么我的 Python 方法会抛出'TypeError:method() 需要 1 个位置参数,但给出了 2 个”错误?

Patricia Arquette
发布: 2024-12-14 04:00:14
原创
744 人浏览过

Why Does My Python Method Throw a

Python 方法中的解构参数:解开“TypeError:method() 需要 1 个位置参数,但给出了 2 个”之谜

尝试时要在 Python 中调用类方法,您可能会遇到令人困惑的“TypeError: method() gets 1positional argument but 2 被给出”错误,尽管看起来只传递了一个参数。为了解开这个谜团,让我们深入研究 Python 方法的行为和参数解构的概念。

在 Python 中,类方法的操作方式与某些编程语言中的对应方法不同。调用类方法时,类定义中的方法签名定义了它期望的参数数量,包括 self 参数。

在提供的代码片段中:

class MyClass:

    def method(arg):
        print(arg)
登录后复制

该方法期望单个参数,从调用者的角度来看,它作为 my_object.method("foo") 传入。然而,Python 在执行该方法之前会在幕后执行一些语法解构。它将调用者的语法转换为:

MyClass.method(my_object, "foo")
登录后复制

如您所见,该方法需要两个参数:

  • my_object,它指的是调用该方法的实例.
  • arg,接收调用者提供的参数,在本例中, "foo".

Python 自动向方法提供第一个参数,即对象本身。这就是为什么当您的调用者尝试传递附加参数时您会收到错误消息,导致总共有两个参数。

对于需要访问其所属实例的方法, self 参数是必不可少的。它允许方法与特定于实例的数据交互或执行与对象状态相关的任务。

为了处理不需要访问实例的情况,Python 提供了 @staticmethod 装饰器。这个装饰器抑制了 self 参数的隐式传递。

如提供的代码片段所示:

class MyOtherClass:

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

my_other_object = MyOtherClass()
my_other_object.method("foo")
登录后复制

MyOtherClass 中的方法不需要访问实例,允许您调用它而不传递 self 参数。

理解类方法和参数解构的行为对于解决此类错误和编写健壮的代码至关重要在 Python 中。

以上是为什么我的 Python 方法会抛出'TypeError:method() 需要 1 个位置参数,但给出了 2 个”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板