面向对象三大个性:
封装:依据职责将属性和办法封装到一个形象的类中继承:实现代码的重用,雷同的代码不须要反复的编写多态:不同的对象调用雷同的办法,产生不通过的执行后果,减少代码的灵便度
一、问题的抛出——单纯的封装可能会呈现很多反复的代码
上面看一张图,能够看出动物类,和狗类,还有哮天犬类都有很多反复的办法代码,这样大大降低了代码的效率,产生很多反复的代码,批改代码也变得麻烦了起来。比方我要批改动物类的吃办法,那么狗类中的吃办法也要反复批改一遍很麻烦等状况,那么解决这个问题就能够用到面向对象中的继承个性来解决。
上面是不应用继承的代码:
class Animal(): def eat(self): print("吃") def run(self): print("跑") def drink(self): print("喝") def sleep(self): print("睡")class Dog(): def eat(self): print("吃") def run(self): print("跑") def drink(self): print("喝") def sleep(self): print("睡") def bark(self): print("汪汪叫")# 1. 创立动物类对象 - 小花狗huagou = Animal()# 调用办法huagou.eat()huagou.run()huagou.drink()huagou.sleep()# 2. 创立狗类对象 - 斑点狗bandia = Dog()# 调用办法bandia.eat()bandia.run()bandia.drink()bandia.sleep()bandia.bark()
执行后果:
二、继承的概念、语法和特点
1)继承的概念:
子类领有父类的所有办法和属性。
应用继承后只须要把子类中特有的属性和办法再次封装一下就能够了,而不须要其余子类中把父类的办法反复编写一遍。
2) 继承的语法:
class 类名(父类名): pass
3)特点:
子类继承自父类,能够间接享受父类中曾经封装好的办法,不须要再次开发子类中应该依据职责,封装子类特有的属性和办法
应用继承批改下面的代码:
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("汪汪叫")# 1. 创立动物类对象 - 小花狗huagou = Animal()# 调用办法huagou.eat()huagou.run()huagou.drink()huagou.sleep()# 2. 创立狗类对象 - 斑点狗bandia = Dog()# 调用办法bandia.eat()bandia.run()bandia.drink()bandia.sleep()bandia.bark()
执行后果:仍旧没变
三、继承相干的术语——继承和派生
专业术语:
Dog类是Animal类的子类,Animal类是Dog类的父类,Dog类从Animal类中继承
Dog类是Animal类的派生类,Animal类是Dog类的基类,Dog类从Animal类中派生
四、继承的传递性
C类从B类继承,B类又从A类继承,那么C类就具备B类和A类的所有属性和办法
总结: 子类领有父类以及父类的父类中封装的所有属性和办法
代码体验:
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("老子会飞,哈哈哈哈")# 创立一个哮天犬对象xtq = XiaoTianQuan()# 调用办法xtq.eat()xtq.run()xtq.drink()xtq.sleep()xtq.bark()xtq.fly()
执行后果:
五、继承传递性的注意事项
留神:看看有没继承关系
发问:哮天犬可能调用Cat类中定义的catch办法吗?
答案:不能。尽管哮天犬类和Cat类都继承了Animal父类,然而因为哮天犬和Cat之间没有继承关系所以不能。
更多对于Python基础知识和进阶常识都能够去Python自学网(www.wakey.com.cn/)学习,还有Python学习路线解说。