目录
面向对象三大特性:
下面看一张图,可以看出动物类,和狗类,还有哮天犬类都有很多重复的方法代码,这样大大降低了代码的效率,产生很多重复的代码,修改代码也变得麻烦了起来。比如我要修改动物类的吃方法,那么狗类中的吃方法也要重复修改一遍很麻烦等情况,那么解决这个问题就可以用到面向对象中的继承特性来解决。
下面是不使用继承的代码:
- 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自学网学习,还有Python学习路线讲解。