在软件设计里,代码的复用和代码稳定性,一直是软件开发的重要目标之中的一个。由于仅仅有这样才干积累各种基础组件,以及维护曾经做过的工作。从复用的特性来说,就是利用曾经做过的工作,比方就像硬件里的IC一样。不须要知道它是怎么样实现的,仅仅要使用它即可了。
因而软件也须要有这样的IC,在代码层次里的IC。曾经看来仅仅是用函数的方式复用,或者仅仅是数据结构的复用。
当迈进面向对象编程时代时,自然而然地想到就使用类来复用了。这样数据结构和函数都同一时候能复用上。比函数的复用更省心了一步,就是数据结构和算法都不须要关心了,仅仅关心类提供了几个接口即可。比方想要MD5进行签名,仅仅须要使用这个类设置计算的数据和长度。就能够直接返回对应MD5签名了。
而不必关心内部是做什么运算。使用什么数据结构来保存中间变量等。在类的复用里,主要有两种方式。一种是直接使用类,不正确类进行不论什么的改变。比方类的组合方式;第二种是对类进行改变,继承就是其主要方式。
继承的方式要比组合的方式更方便,由于继承能够直接使用父类的数据结构,不需考虑父类的生命周期。而组合的方式是一定要考虑的。继承的方式能够不改变曾经接口,而使用最新的优化的算法,而组合的方式是一定要改变接口。
继承的方式处理不同版本号软件兼容性也要方便。比方开发三个版本号的软件。每个版本号功能測试完毕之后,再开发下一个版本号,在开发下一个版本号时。又不想修改原来的代码,但又要利用和修改其一些计算方法,使用继承是最好的。
这样能够在一个类里实现自己主动识别不同的版本号功能进行处理,仅仅须要创建时创建新的类对象就能够。
Python里也设计有类继承。它的类继承方式怎么样呢?大体例如以下:
class Super: def __init__(self, x): print('Super init') class Sub(Super): def __init__(self, x, y): Super.__init__(self, x) print('Sub init') I = Sub(1, 2)
从上面能够看到。Super类是基类(又称为超类)。Sub是继承Super类。Sub类能够继承多个基类,仅仅要在括号并列多个即可,如Sub(Super1, Super2, Super3)。在派生类里要明白地调用基类的构造函数。才干够执行基类构造函数,如Super.__init__(self, x)。这一点不像C++的特性,在C++里是自己主动执行基类的构造函数。再执行派生类的构造函数。Python里按须要定制,想什么时候执行就在什么地方调用。