我正在使用继承的 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)
解释:
-
位置参数与关键字参数:
在 Python 中,可以使用位置参数(基于顺序)或关键字参数(使用名称-值对)来传递参数。在的原始代码中,
super().__init__(self, var1=1, var2=2)
试图将var1
和var2
同时作为位置参数和关键字参数传递,从而导致冲突。 -
解决方案:
通过将
var1
和var2
作为位置参数(如更正后的代码所示)或仅作为关键字参数(例如super().__init__(var1=var1, var2=var2)
)传递给super().__init__()
,可以解决此问题。
通过此更改,的代码应该可以正常运行,而不会出现“TypeError”。请记住,在调用函数时,请始终保持一致的参数传递方式,以避免此类错误。
标签:python,python-3.x,oop,super From: 60473871