python中继承的关于构造函数问题

子类继承父类后,可以选择是否调用父类的构造函数(即__init__函数)。

1. 不调用父类构造函数

如果子类不想调用父类的构造函数,就需要写出自己的构造函数:

class Parent(object):
    def __init__(self, number):
        self._number  = str(number)
        print('Parent')
        self.call_number()

    def call_number(self):
        print('Parent\'s number is ' + self._number)

class Child(Parent):
    def __init__(self, number):
        self._number = str(number)
        print("Child")
        self.call_number()
    
    def call_number(self):
        print('Child\'s number is ' + self._number)

cx = Child(123)

# 输出为 Child
# Child's number is 123

2. 调用父类构造函数

如果想调用父类中的构造函数,有两种方法可用。一种是子类中不写构造函数,一种是在子类的构造函数中继承父类的构造函数。

2.1 子类中不写构造函数

class Parent(object):
    def __init__(self, number):
        self._number  = str(number)
        print('Parent')
        self.call_number()

    def call_number(self):
        print('Parent\'s number is ' + self._number)

class Child(Parent):
    
    def call_number(self):
        print('Child\'s number is ' + self._number)

cx = Child(123)

# 输出为 Parent
# Child's number is 123

可见,当子类中没有构造函数时,将调用父类的构造函数。

在这里还可以发现,调用完父类的构造函数之后,父类的self.call_number()调用的是子类中的方法。所以我们还可以知道,当子类中的方法名称与父类中的重合时,将优先调用子类中的方法。

2.2 子类的构造函数继承父类的构造函数

继承的写法有两种:

  1. super(子类名, self).__init__(参数1,...)
    在python3中可直接简写为super().__init__(参数1,...)
  2. (父类名).__init__(self, 参数1,...)
class Parent(object):
    def __init__(self, number):
        self._number  = str(number)
        print('Parent')
        self.call_number()

    def call_number(self):
        print('Parent\'s number is ' + self._number)

class Child(Parent):
    def __init__(self, number):
        super().__init__(number)
      # Parent.__init__(self, number)
        self._number = str(number)
        self.call_number()

    def call_number(self):
        print('Child\'s number is ' + self._number)

cx = Child(123)

#输出结果为:Parent
# Child's number is 123
# Child
# Child's number is 123

由于继承的父类的和子类自有的构造函数中均有self.call_number()print(),因此打印了连两次。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值