为了账号安全,请及时绑定邮箱和手机立即绑定

直接从`object`继承时,我应该调用super().__init__()吗?

直接从`object`继承时,我应该调用super().__init__()吗?

PIPIONE 2021-06-07 12:00:03
既然这个问题是关于继承和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?
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号