应用面向对象继承开发时常常会遇到的一种状况,重写。
继承:
- 子类领有父类的所有属性和办法。
- 子类继承自父类,乐意间接享受父类中曾经封装好的办法,不须要再次开发。
利用场景:
当父类的办法实现不能满足子类需要时,能够对办法进行重写(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()
执行后果:
3.调用父类办法的另外一种形式(晓得)
在python2.0时,如果须要调用父类的办法,还能够应用以下形式:
父类名.办法(self)
这种形式目前在python3.x还反对这种形式
这种办法不举荐应用,因为一旦父类产生过变动,办法调用地位的类名同样须要批改
提醒:
在开发时,父类名 和 super( ) 两种办法不要混用如果应用以后子类名 调用办法,会造成递归调用,呈现死循环
代码体验:批改局部+留神局部
欢送关注博主或 返回 『Python自学网』www.wakey.com.cn/, 从根底入门收费课程开始,逐渐深刻学习python全栈体系课程,适宜新手入门到精通全栈开发。