在前面python面向对象的学习,我们主要学习类和对象的构造和一些内置属性和函数,主要是围绕着类和对象本身来深入探讨的,接下来我们将对类和类,对象和对象的关系来研究,也就是面向对象的三大特性:封装、继承、多态。
在python面向对象中封装在之前的构造中已经详细讲解过了,多态在python中体现的并不是很成熟,或者说python没有实际意义上的多态,这一点到后面会有一节课演示给大家看,所以说我们研究的重点是在继承上。继承是指一个类拥有另一个类或者另几个类的属性和方法。
比如我们之前讲到的类的构造中有一个经典类:
class Name(object):
pass
这里面Name类继承父类object,而在元类中我们讲过object又继承自type元类。立足于object类,我们可以这样描述这三个类的关系。type是元类,Name是子类。简单的讲向上描述一般用(父类、基类、元类、超类),向下描述一般用(派生类、子类),为了统一口径并且符合python称呼习惯,后面的课程我们主要用父类,基类,子类这三种称呼。
python中除了上面的继承方式,还可以实现多继承。
class Person(object):
pass
class Teacher(object):
pass
class China_Teacher(Person, Teacher):
pass
可以通过__bases__属性来查看继承关系。
print(China_Teacher.__bases__) # (<class '__main__.Person'>, <class '__main__.Teacher'>)
print(Person.__bases__) # (<class 'object'>,)
print(object.__bases__) # 没有了
print(type.__class__) # <class 'type'>
print(type.__bases__) # (<class 'object'>,) type是继承自object
print(object.__class__) # <class 'type'> object是由type实例化而来