我的Python学习之路十六:面向对象(二)
取精华,去糟粕;重基础,促创新
一.继承
1.继承的感性认识
在现实生活中,继承一般指的是子女继承父辈的财产。那么在程序中,继承描述的是事物之间的所属关系,例如猫和狗都属于动物,程序中可以描述为猫和狗都继承自动物。同理,波斯猫和家猫都继承自猫。而斑点狗,泰迪都继承之狗。程序中当我们定义一个class的时候,可以从某个现有的class继承,新的class称之为子类(Subclass),而被继承的class称之为基类、父类或超类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。
示例:
2.多继承语法格式
class DerivedClassName(Base1, Base2, Base3):
<statement-1>
.
.
.
<statement-N>
注意事项:需要注意圆括号中父类的顺序,如果继承的父类中有相同的方法名,而在子类中使用时未指定,python将从左至右查找父类中是否包含方法.
3.super()函数
super() 函数用于调用下一个父类(超类)并返回该父类实例的方法。 super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO).
MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表
二.多态
多态即多种形态,在运行时确定其状态,在编译阶段无法确定其类型,这就是多态。
Python中的变量是弱类型的,在定义时不用指明其类型,它会根据需要在运行时确定变量的类型 . 并且Python本身是一种解释性语言,不进行预编译,因此它就只在运行时确定其状态。
在Python中很多地方都可以体现多态的特性,比如内置函数len(object),len函数不仅可以计算字符串的长度,还可以计算列表、元组等对象中的数据个数,这里在运行时通过参数类型确定其具体的计算过程,正是多态的一种体现。