应用面向对象继承开发时常常会遇到的一种状况,重写。

继承:

  1. 子类领有父类的所有属性和办法。
  2. 子类继承自父类,乐意间接享受父类中曾经封装好的办法,不须要再次开发。

利用场景:

当父类的办法实现不能满足子类需要时,能够对办法进行重写(override)

尽管Dog类中有叫唤的办法,如果因为哮天犬是神犬和一般狗狗叫唤形式不一样,所以Dog类中的Dark办法满足不了,这时就要对这个dark办法重写了。

重写父类办法有2种状况:

笼罩父类的办法
对父类办法进行扩大

一、笼罩父类的办法

如果在开发中,父类的办法实现和子类的办法实现齐全不同,就能够应用笼罩的形式,在子类中从新编写父类的办法实现。

具体的实现形式:

就相当于在子类中定义了一个和父类同名的办法并且实现,重写之后,在运行时,只会调用子类中重写的办法,而不再会调用父类封装的办法。

代码体验:

class Animal():    def eat(self):        print("吃")    def run(self):        print("跑")    def drink(self):        print("喝")    def sleep(self):        print("睡")class Dog(Animal):    def bark(self):        print("汪汪叫")class XiaoTianQuan(Dog):    def fly(self):        print("老子会飞,哈哈哈哈")    def bark(self):        print("天籁之音")# 创立一个哮天犬对象xtq = XiaoTianQuan()# 如果子类中重写了父类办法# 在应用子类对象调用办法时,会调用子类中重写的办法xtq.bark()

执行后果:

留神:如果在XiaoTianQuan类中没有从新编写bark办法,那么执行后果是汪汪叫,因为此时调用的仍旧是父类中的bark办法。

二、对父类办法进行扩大

如果在开发中,子类的办法实现中蕴含父类的办法实现,父类本来封装的办法实现是子类办法的一部分,就能够应用扩大的形式。

1.扩大的形式步骤:

在子类中重写父类的办法在须要的地位应用 super().父类办法 来调用父类办法的执行代码其余的地位针对子类的需要,编写子类特有的代码实现

2.对于super

在python中super是一个非凡的类super()就是应用super类创立进去的对象最常应用的场景就是,在重写父类办法时,让super().调用在父类中封装的办法实现

代码体验:

性能需要:不仅要会汪汪叫,还要会天籁之音。

class Animal():    def eat(self):        print("吃")    def run(self):        print("跑")    def drink(self):        print("喝")    def sleep(self):        print("睡")class Dog(Animal):    def bark(self):        print("汪汪叫")class XiaoTianQuan(Dog):    def fly(self):        print("老子会飞,哈哈哈哈")    def bark(self):        # 1. 针对子类特有的需要,编写代码        print("天籁之音")        # 2. 应用super(). 调用本来在父类中封装的办法        super().bark()        # 3. 减少其余子类的代码        print("OK啦OK啦OK啦OK啦")# 创立一个哮天犬对象xtq = XiaoTianQuan()xtq.bark()![](/img/bVc2gBa)

执行后果:

3.调用父类办法的另外一种形式(晓得)

在python2.0时,如果须要调用父类的办法,还能够应用以下形式:

父类名.办法(self)

这种形式目前在python3.x还反对这种形式

这种办法不举荐应用,因为一旦父类产生过变动,办法调用地位的类名同样须要批改

提醒:

在开发时,父类名 和 super( ) 两种办法不要混用如果应用以后子类名 调用办法,会造成递归调用,呈现死循环

代码体验:批改局部+留神局部

欢送关注博主或 返回 『Python自学网』www.wakey.com.cn/, 从根底入门收费课程开始,逐渐深刻学习python全栈体系课程,适宜新手入门到精通全栈开发。