使用超类的属性是否总是需要在子类中创建新实例?

时间:2018-07-08 15:47:55

标签: oop inheritance attributes python-3.6

获取以下代码段

class CreditCard:
   def __init__(self,customer,bank,acnt,limit):
    ....
    ....
class PredatoryCreditCard(CreditCard):
   def__init__(self,customer,bank,acnt,limit):
   ....
   super().__init__(customer,bank,acnt,limit)
  1. 是否总是需要在子类中编写def__init__(self,customer,bank,acnt,limit):?还是super().__init__(customer,bank,acnt,limit)会完成工作?

  2. 如果子类中使用了另一个新参数newattr,那么它应该包含在__init__()方法中还是使用self._newattr= newattr声明就足够了?

    < / li>

1 个答案:

答案 0 :(得分:0)

除非您的子类定义了__init__方法,否则它将继承其父级的__init__方法。因此,两者之间没有区别

class A(Parent):
    def __init__(self,customer,bank,acnt,limit):
        super().__init__(customer, bank, acnt, limit) 

class A(Parent):
    pass

如果您需要对该类的实例进行特定的配置,则只需要使用自己的实现覆盖__init__方法即可。

class PredatoryCreditCard(CreditCard):
    def __init__(self,customer, bank, acnt, limit, newattr):
        super().__init__(customer, bank, acnt, limit) 
        self._newattr = newattr

所有特定于实例的属性的设置都应在__init__方法中进行。

此继承行为对__init__的对待与其他任何方法都不相同。