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 runningOK , 可以看到调用子类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): passOK ,这样Dog就继承了Mammal和Runnable的功能。
1 0
- Python学习09:继承与多重继承
- python学习-多重继承
- python 继承多重继承
- python学习笔记 多重继承
- python学习——多重继承
- python的多重继承与多态
- 多重继承与虚继承
- 多重继承与虚继承
- 多重继承与虚继承
- 单一继承与多重继承
- 多重继承与虚继承
- 多重继承与虚继承
- 多重继承与虚继承
- 多重继承与虚拟继承
- 多重继承与虚继承
- C++ 继承与多重继承
- 多继承与多重继承
- 单一继承与多重继承
- 浦发网上银行
- 分布式系列——分布系统的一些技术
- git merge和git rebase的区别
- 汉洛塔递归实现的思考(C语言)
- VB中的传值和传址,形式参数与实际参数
- Python学习09:继承与多重继承
- shuffle:随机打乱一个数组的顺序的另一种方法
- 校招感想
- Haskell作业|检查一个信用卡卡号是否有效
- 浅谈Activity的生命周期
- 小渣渣的前端学习之路
- 小影
- 软考总结
- String源码分析之equals和hashcode方法