应用面向对象继承开发时常常会遇到的一种状况,重写。
继承:
- 子类领有父类的所有属性和办法。
- 子类继承自父类,乐意间接享受父类中曾经封装好的办法,不须要再次开发。
利用场景:
当父类的办法实现不能满足子类需要时,能够对办法进行重写(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 全栈体系课程,适宜新手入门到精通全栈开发。