wKiom1ND6Jrz-a3XAAOi5bzxWhw653.jpg

这是为什么呢过

    第一个例子是父类被子类覆盖,虽然子类C继承了父类P,但有时候我们需要些子类特有的功能,,所以在子类实例化以后,就只会显示子类的内容。如果还想调用下父类,也是行的痛的,就是再往下:

P.foo(e)就可以打印出父类的内容。对于P.foo(self)是显式的传进了self,能将内容同时打印出来。

  在最后调用类P的时候并没有用到实例p,一般我们还可以这样,继续往下的例子,两个能同时打印出来。但还有个方法就是super()内建方法,不仅能传进父类的方法,还传进了self。接下来之需要调用子类的方法就ok了。上面出现了异常,是因为super的第一个参数传错了,应该是子类C,下面是改过后的:

wKioL1ND7ZHzv_WNAANbCv532jI374.jpg


1
好,继续

然后几是__init__方法,书中介绍说它更类似于一个构造器,也是方法,平常都说是特殊的方法。如果基类中带了__init__方法,派生出来的子类如果不重写__init__方法,子类被实例化后,就会继承基类并且自动调用基类的,所以上面的例子中虽然调用的是类You的方法,但结果自动调用了Like方法,如果不想自动调用,必须在子类中重写__init__方法。当我重写了之后,就不会自动调用了。同样道理,也可以用于super()内建方法。