首页 > 编程问答 >Python 3 使用 super() 函数时出现“类型错误:__init__() 获得多个参数值”

Python 3 使用 super() 函数时出现“类型错误:__init__() 获得多个参数值”

时间:2024-07-27 11:29:29浏览次数:7  
标签:python python-3.x oop super

我正在使用继承的 Python 3 编写一个 OOP 程序,当我尝试像这样初始化子类时遇到标题错误:

class Parent:
    def __init__(self, var1, var2):
        self.var1 = var1
        self.var2 = var2

    #more methods that to some stuff

class Child(Parent):
    a = 1 #a and b are class attributes
    b = 2

    def __init__(self, var1 = 1, var2 = 2, var3 = None):
        super().__init__(self, var1 = 1, var2 = 2) #error shows up for this line
        self.var3 = var3

child_obj = Child(var3 = 3)

当我创建 Child 对象时,我收到一条错误消息: TypeError: __init__() got multiple values for argument 'var1' 有人知道这里可能出了什么问题吗?提前致谢。


此错误是因为同时将 var1 var2 作为位置参数和关键字参数传递给 super().__init__() 。在 Python 中,不能以这两种方式传递参数。

更正后的代码:

class Parent:
    def __init__(self, var1, var2):
        self.var1 = var1
        self.var2 = var2

    #更多方法

class Child(Parent):
    a = 1
    b = 2

    def __init__(self, var1=1, var2=2, var3=None):
        super().__init__(var1, var2)  # 将 var1 和 var2 作为位置参数传递
        self.var3 = var3

child_obj = Child(var3=3)

解释:

  1. 位置参数与关键字参数: 在 Python 中,可以使用位置参数(基于顺序)或关键字参数(使用名称-值对)来传递参数。在的原始代码中, super().__init__(self, var1=1, var2=2) 试图将 var1 var2 同时作为位置参数和关键字参数传递,从而导致冲突。
  2. 解决方案: 通过将 var1 var2 作为位置参数(如更正后的代码所示)或仅作为关键字参数(例如 super().__init__(var1=var1, var2=var2) )传递给 super().__init__() ,可以解决此问题。

通过此更改,的代码应该可以正常运行,而不会出现“TypeError”。请记住,在调用函数时,请始终保持一致的参数传递方式,以避免此类错误。

标签:python,python-3.x,oop,super
From: 60473871

相关文章

  • 为什么我会收到 Python IOError: [Errno 13] 写入文件时权限被拒绝?
    我不明白我做错了什么。我正在运行一些测试并将结果写入文件。写入文件的代码部分如下(在名为Tester的类中):@staticmethoddefprintHeader(resultsFileName):ifnotos.path.isfile(resultsFileName):#Thefiledoesnotexist,thus#......
  • 为什么当我在 cmd 中输入 python - -version 时,除了空行之外什么都没有出现?
    我已经下载了python3.9。但是,在通过命令行检查版本时,我确实得到了一个空行而不是版本。我在cmd上使用了以下命令:python--version有几个原因可能会导致在cmd中输入python--version时只出现空行。以下是一些可能的解决方法:1.Python没有添加到......
  • Python爬虫技术 第16节 XPath
    XPath是一种在XML文档中查找信息的语言,尽管XML和HTML在语法上有区别,但XPath同样适用于HTML文档的解析,尤其是在使用如lxml这样的库时。XPath提供了一种强大的方法来定位和提取XML/HTML文档中的元素和属性。XPath基础XPath表达式由路径表达式组成,它们指定了文档中的位置。下......
  • 如何从Python中的“openpyxl”饼图中删除“Series1”标签?
    我正在使用openpyxl创建一个包含饼图的Excel文件。但是,我似乎无法从图表中删除默认的“Series1”标签。为了更好的上下文,我已经包含了整个export_to_excel函数,但问题具体在于我创建饼图的分析表。defexport_to_excel(self):start_date=self.fromDate.date().toSt......
  • 在python3.8虚拟环境 执行pip 安装Excel的库
    1、在开始菜单打开Anacondaprompt(anaconda3) 2、查看环境列表 3、进入虚拟环境 4、在虚拟换进下使用清华源安装读取excel的库和写入excel的库读取Excel文件的库:pipinstallxlrd-ihttps://pypi.tuna.tsinghua.edu.cn/simple 写入Excel文件的库:pipinstallxlwt......
  • Python Pandas 使用 .loc 跨列级别多重索引
    我对python和pandas仍然很陌生,想知道是否有更好的方法来解决我遇到的索引问题。因为我看到人们在这个网站上做了非常巧妙的事情,超出了我通常可以从文档中收集到的内容,所以我想我会问——特别是因为我还在学习。我有一个包含多个列的DataFrame级别,级别0是“meta”和“r......
  • Python、Scapy 并导出到 .exe
    目前我会玩一点scapy、Qt和python。到目前为止,使用VSC启动程序时一切正常。现在我尝试使用PyInstaller制作.exe。它也有效,我得到了一个.exe文件,可以打开它并显示我的Qt-Windows。但是当我使用scapy函数时,程序崩溃,没有任何消息,并且窗口关闭。我激活了日志记录并发......
  • 使用 python 检测鼠标是等待还是忙碌
    我正在用Python2.7创建一个脚本。该脚本在应用程序内自动执行鼠标单击。有一些情况,在单击鼠标后,鼠标光标将“等待”,我想等到鼠标光标恢复正常后再进行操作我进入代码中的下一步。Python中是否可以检测鼠标是否正在等待?在Python中没有内置方法可以检测......
  • ValueError:在带有 GATT 的 Python 中,以 16 为基数的 int() 的文字无效:b'0f 18 '
    我正在使用Python和GATT库pxexpect来处理一些数据,但在尝试将十六进制值转换为整数时遇到问题。这是我看到的具体错误:print(int(gatt.before,16)),^^^^^^^^^^^^^^^^^^^^ValueError:invalidliteralforint()withbase16:b'0f18'这是产生错误的代......
  • 我看不懂这个python脚本?
    用于加载.dat文件的Python脚本importcsvfromdjango.core.management.baseimportBaseCommandfromrecommender.modelsimportUser,Artist,Tag,UserArtist,UserTaggedArtist,UserFriendimportosfromdjango.confimportsettings#Definethepathtothedatab......