使用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语言及其应用》。