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

本文学习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 running
Persion is running
Student is running
Student 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):
    pass

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

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







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值