Python TypeError:\uuuu init\uuuuuu()接受3个位置参数,但给出了4个
以下是我的课程代码:Python TypeError:\uuuu init\uuuuuu()接受3个位置参数,但给出了4个,python,Python,以下是我的课程代码: class Employee: def __init__(self, name, gender): self.name = name self.gender = gender class Salary: def jump(self, name, salary): print(self.name, self.salary) class Male(Salary, Employee): def __in
class Employee:
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Salary:
def jump(self, name, salary):
print(self.name, self.salary)
class Male(Salary, Employee):
def __init__(self, name, gender, occupation):
super(Male, self).__init__(name, gender, occupation)
self.occupation = occupation
# Separate from all classes (list of instantiated objects)
employee1 = Male("Jim", "male", "technician")
print(Male.name)
当我在创建所有类后使用代码的最后两行时,引用super(Male,self)时会出现一个“TypeError:init()接受3个位置参数,但给出了4个位置参数”错误。。。。雇员1=男性(…行。在宠物下,您有:
def __init__(self, name, color):
self.name = name
self.color = color
def __init__(self, name, color, owner):
super(Dog, self).__init__(name, color, owner)
在“狗”下,您有:
def __init__(self, name, color):
self.name = name
self.color = color
def __init__(self, name, color, owner):
super(Dog, self).__init__(name, color, owner)
在Dog下面有一个额外的owner位置参数,这导致了这个错误。另外,我认为super()。\uuuu init\uuuu(名称,颜色)
在Python 3中也同样有效
class Employee:
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Salary:
def __init__(self, name, gender):
self.name = name
self.gender = gender
def jump(self):
print(self.name, self.salary)
class Male(Salary, Employee):
def __init__(self, name, gender, occupation):
self.occupation = occupation
Employee.__init__(self, name, gender)
Salary.__init__(self, name, gender)
employee1 = Male("Jim", "male", "technician")
print(employee1.name)
要访问基类Employee
,在派生类Male
中使用super()
函数。
示例中显示了使用super
函数的语法。
同时,使用print(employee1.name)
代替print(Male.name)
“您正在super中写入职业参数,但是super调用父类,而您的父类没有职业参数。职业只属于类Male。”
super(Dog,self)。\uuuuu init\uuuuuu(name,color,owner)
有一个太多的argumentsExtra,k=Klass()
和k.method()
与Klass.方法(k)完全相同。您使用的继承错误;Male
不是一种Salary
。您也使用的super
错误;您必须知道哪些类出现在Male
的方法解析顺序中,这样您就不会传递任何预期之外的参数。有关使用super的更多信息,请参阅代码>正确。请添加一些文本以澄清您的答案。这仍然会失败,因为super()。\uuuuu init\uuuuu
将尝试调用Salary.\uuuuuu init\uuuuu
首先。修改答案以处理Salary.\uuuuuu init\uuuu
。