写在前面的话:
面向对象三大特性---
---1.封装(1_1-->1_6), 根据 职责将属性和方法封装到一个抽象的类中;
---2.继承 (1_7-->1_8) 实现代码的重用, 相同的代码不需要重复的编写;
---3.多态(1_9以后) 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度;
正式开始单继承学习:
① 继承的概念
继承的概念:子类 拥有 父类 的所有属性和方法
相同代码可以重用,这就是继承要做的事。
举例:如下,动物类,狗类,哮天犬类中有互相包含的属性和方法。比如都会吃 喝 跑 睡觉。
所以在写代码的时候,相同代码可以重用,这就是继承要做的事。
② 继承的语法
如下语法: class 类名(父类名): pass |
在写动物类,狗类,哮天犬类时,共同有的属性我们考虑放到 父类 中。也就是哮天犬属于狗类,而狗类属于动物类,所以哮天犬的父类是狗类和动物类,狗类的父类是动物类。
程序如下:
class Animal:
def eat(self):
print("吃---")
def drink(self):
print("喝---")
def run(self):
print("跑---")
def sleep(self):
print("睡---")
class Dog(Animal):
# 下面注释部分方法由继承父类提供,子类不需要在重复写了
# def eat(self):
# print("吃")
#
# def drink(self):
# print("和")
#
# def run(self):
# print("跑")
#
# def sleep(self):
# print("睡")
def bark(self):
print("叫")
dog = Dog()
dog.eat()
dog.drink()
dog.run()
dog.sleep()
dog.bark()
运行结果:
③.继承的传递性
子类 拥有 父类 以及 父类的父类 中 封装的所有 属性和方法
通俗来讲就是儿子继承父亲并且继承爷爷。
案例:哮天犬,继承狗类,继承动物类
程序实现:
class Animal:
def eat(self):
print("吃---")
def drink(self):
print("喝---")
def run(self):
print("跑---")
def sleep(self):
print("睡---")
class Dog(Animal):
def bark(self):
print("叫")
class Xiaotianquan(Dog):
def fly(selfs):
print("我会飞!")
xtq = Xiaotianquan()
xtq.eat()
xtq.drink()
xtq.run()
xtq.sleep()
xtq.bark()
xtq.catch()
④ 继承的注意事项
在动物类中除了上节讲的 派生 一个Dog类,这节我们再派生一个Cat类,思考:Xiaotianquan类能否调用Cat类
程序如下:
class Animal:
def eat(self):
print("吃---")
def drink(self):
print("喝---")
def run(self):
print("跑---")
def sleep(self):
print("睡---")
class Dog(Animal):
def bark(self):
print("叫")
class Cat(Animal):
def catch(self):
print("我会抓老鼠")
class Xiaotianquan(Dog):
def fly(selfs):
print("我会飞!")
xtq = Xiaotianquan()
xtq.catch()
注意程序会报错, 因为xiaotianquan类和Cat类不是直接继承关系,所以哮天犬不能调用Cat类的抓老鼠方法。