使用super从子类调用父类的方法。

class Person():
  def __init__(self, name):
    self.name = name
    
#下面是子类的定义。
#注意,子类的初始化方法__init__()中添加了一个额外的email参数。
class EmailPerson(Person):
  def __init__(self,name,email):
    super().__init__(name)
    self.email = email

       在子类中定义__init__()方法时,父类的__init__()方法会被覆盖。因此,在子类中,父类的初始化方法并不会被自动调用,我们必须显示调用它。以上代码实际上做了这样几件事情。

  • 通过super()方法获取了父类Person的定义。

  • 子类的__init__()调用了Person.__init()__方法。它会自动将self参数传递给父类。因此,你只需传入其余参数即可。在上面的例子中,Person()能接受的其余参数指的是name。

  • self.email = email这行新的代码才真正起到了将EmailPerson与Person区分开的作用。

>>> bob = EmailPerson('Bob Frapples', 'bob@frapples.com')
#既可以访问name特性,也可以访问email特性
>>> bob.name
'Bob Frapples'
>>> bob.email
'bob@frapples.com'

子类可以按照自己的方式处理问题,但如果仍需要借助父类的帮助,使用super()是最佳的选择。


摘自《Python语言及其应用》。