每当我运行这段代码时,我总是得到一个TypeError
,上面写着__init__() missing 1 required positional argument: 'hours'
,
但是我没有试图改变ScientificSwimmer
类继承自的原始类的任何内容……如果这有意义的话
代码如下:
class Human:
def __init__(self, name, age):
self.name = name
self.age = age
def hobby(self):
print("Likes watching Netflix")
def info(self):
print(self.name , "is ",self.age," years old")
class Scientist(Human):
def __init__(self, name, age, lab):
super().__init__(name, age)
self.lab = lab
def hobby(self):
print("Likes doing scientific experiments")
def labName(self,lab):
print("works at the " ,lab, "laboratory")
class Swimmer(Human):
def __init__(self, name, age, hours):
super().__init__(name,age)
self.hours = hours
def hobby(self):
print("likes swimmming in the lake" )
def hoursSwimming(self, hours):
print("swims ", hours , "hours per week")
class ScientificSwimmer(Scientist, Swimmer):
def __init__ (self, name, age, lab, hours):
Scientist.__init__(self,name, age, lab)
Swimmer.__init__(self, name, age, hours)
scienswim = ScientificSwimmer("\nJohn Smith", 30, "nuclear", 100)
scienswim.info()
scienswim.hobby()
scienswim.labName("nuclear")
scienswim.hoursSwimming(100)
我想要的结果是打印:
John smith is 30 years old.
likes doing scientific experiments.
works at the nuclear laboratory.
swims 100 hours per week.
您的原始类根本没有正确地设计为支持协作继承,这就是
super
的设计目的。使用super
的第一条规则是:不能假设您知道super()
将引用哪个类。这是由self
的运行时类型决定的,而不是静态继承自的类只使用关键字参数以确保方法签名保持兼容,并始终使用任何未知关键字参数(即签名中未明确提及的参数)调用
super().__init__
ScientificSwimmer
的方法解析顺序为[ScientificSwimmer, Scientist, Swimmer, Human, object]
。其结果如下:ScientificSwimmer
不需要定义,因为其他{Scientist.__init__
提取lab
关键字参数,并将其余参数传递给下一个类李>Swimmer.__init__
提取hours
关键字参数,并将其余参数传递给下一个类李>Human.__init__
提取name
和age
关键字参数,并将其余参数传递给下一个类李>object.__init__
未接收任何关键字参数,下游类已正确提取所有定义的参数李>相关问题 更多 >
编程相关推荐