Python学习09:继承与多重继承

来源:互联网 发布:c语言可视化编程软件 编辑:程序博客网 时间:2024/05/22 01:36

本文学习Python的笔记,仅供参考


继承

熟悉C++的都应该了解继承了,简单的说一个类继承另外一个类, 可以获得继承类的属性和方法,继承的类称为子类,被继承的类称为父类,比如说人类算是非常大的一个类了,如果按照职业分可能会分为学生类,教师类,工程师类等,其实人类一些共有的属性,学生类和教师类都有,所以学生类完全就可以继承人类,拥有公用的属性。

下面我写了一个Person类,这个类有一个run方法,有一个Student类这个类什么都没有,继承与Person类,可以看到object变成父类的名字即可完成继承。

class Person(object):    def run(self):        print("Persion is running")class Student(Person):    pass
看下子类是否能继承父类的方法:

>>> b = Student()>>> b.run()Persion is running
OK , 可以看到调用子类run方法,因为子类没有,就执行的父类的run方法。

从此可以看出,子类获取了父类的功能,这样可以节约代码了

当然假设Student 有自己的方法呢?会是什么样子,可以尝试一下:

>>> class Student(Person):    def run(self):        print("Student is running")        >>> c = Student()>>> c.run()Student is running
可以看到如果Student有自己的run方法,那么就 执行自己的。

也就是说当子类和父类有相同的方法的时候,也称为子类的run()方法覆盖了父类的方法的时候,就会自动调用子类的方法,这也是继承的另一个好处,多态。

多态

1. 任何以父类作为参数的函数,在不用修改的前提下子类都可以正常运行,也就是说我们如果传入很多子类的时候比如Student,Teacher等,我们只需要接收Person这个类型即可, 原则上子类可以向上转型为父类的类型。

2,.对于一个变量,我们无需知道属于哪个子类,但是如果知道属于哪个父类,那么我们可以完全的去调用父类的方法,由于多态,肯定能找到对应子类的方法。

OK 我们用实例验证下2点,第一点我们写一个函数参数是Person

class Person(object):    def run(self):        print("Persion is running")class Student(Person):    def run(self):        print("Student is running")    def run_man(person):    person.run()    person.run()run_man(Person())run_man(Student())
可以看到run_man是person类的变量,但是我们在运行子类的时候,仍可以动态的找到子类的函数,并且不用修改run_man就兼容父类子类。

======================== RESTART: E:/python/person.py ========================Persion is runningPersion is runningStudent is runningStudent is running

多重继承

其实这个挺容易理解的,比如动物可以分为哺乳类和鸟类,然后根据能跑和能飞,又要进行一次分类,对于狗,可以归属于哺乳类和能跑的。其实多重继承就可以完成这个功能:

class Runnable(object):    def run(self):        print('Running...')class Flyable(object):    def fly(self):        print('Flying...')
能飞和能跑的类,然后还有一个哺乳类和鸟类

class Animal(object):    pass# 大类:class Mammal(Animal):    passclass Bird(Animal):    pass
如果定义一个Dog类,则可以继承Mammal类和Runnable类

class Dog(Mammal, Runnable):    pass
OK ,这样Dog就继承了Mammal和Runnable的功能。







1 0
原创粉丝点击