8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

'TypeError: method() 需要 1 个位置参数,但给出了 2 个',但我只传递了一个

Hounshell 1月前

57 0

如果我有一个类...class MyClass: def method(arg): print(arg)...我用它创建一个对象...my_object = MyClass()...我在其上调用 method(\'foo\') 就像这样......

如果我有一堂课...

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

帖子版权声明 1、本帖标题:'TypeError: method() 需要 1 个位置参数,但给出了 2 个',但我只传递了一个
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Hounshell在本站《oop》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 遇到此类错误时还需要考虑以下几点:

    我遇到了这个错误消息,发现这篇文章很有帮助。结果发现,在我的情况下,我覆盖了 __init__() 存在对象继承的地方。

    继承的示例相当长,因此我将跳到一个不使用继承的更简单的示例:

    class MyBadInitClass:
        def ___init__(self, name):
            self.name = name
    
        def name_foo(self, arg):
            print(self)
            print(arg)
            print("My name is", self.name)
    
    
    class MyNewClass:
        def new_foo(self, arg):
            print(self)
            print(arg)
    
    
    my_new_object = MyNewClass()
    my_new_object.new_foo("NewFoo")
    my_bad_init_object = MyBadInitClass(name="Test Name")
    my_bad_init_object.name_foo("name foo")
    

    结果是:

    <__main__.MyNewClass object at 0x033C48D0>
    NewFoo
    Traceback (most recent call last):
      File "C:/Users/Orange/PycharmProjects/Chapter9/bad_init_example.py", line 41, in <module>
        my_bad_init_object = MyBadInitClass(name="Test Name")
    TypeError: object() takes no parameters
    

    PyCharm 没有发现这个拼写错误。Notepad++ 也没有(其他编辑器/IDE 可能会发现)。

    当然,这是一个“不接受参数”的类型错误,就 Python 中的对象初始化而言,它与预期一个参数时得到的“得到两个”并没有太大区别。

    讨论主题:如果语法正确,将使用重载初始化程序,但如果语法不正确,它将被忽略,而改用内置函数。对象不会期望/处理这一点,并且会抛出错误。

    如果出现语法错误:修复很简单,只需编辑自定义 init 语句:

    def __init__(self, name):
        self.name = name
    
返回
作者最近主题: