既然这个问题是关于继承和super,让我们从编写一个类开始。这是一个简单的日常类,代表一个人:class Person: def __init__(self, name): super().__init__() self.name = name就像每个好的类都应该在初始化之前调用它的父构造函数一样。这个类做得很好;它可以毫无问题地使用:>>> Person('Tom')<__main__.Person object at 0x7f34eb54bf60>但是当我尝试创建一个继承自两个Person类和另一个类的类时,事情突然出错了:class Horse: def __init__(self, fur_color): super().__init__() self.fur_color = fur_colorclass Centaur(Person, Horse): def __init__(self, name, fur_color): # ??? now what? super().__init__(name) # throws TypeError: __init__() missing 1 required positional argument: 'fur_color' Person.__init__(self, name) # throws the same error由于菱形继承(object类位于顶部),无法Centaur正确初始化实例。将super().__init__()在Person结束调用Horse.__init__,因为它抛出一个异常fur_color参数丢失。但是如果Person并且Horse不调用super().__init__().这就提出了一个问题:是否应该直接从objectcall继承的类super().__init__()?如果是,您将如何正确初始化Centaur?
添加回答
举报
0/150
提交
取消