面向对象: Python 类的单继承与多继承
2018-09-15 本文已影响13人
爱码小士
每种动物都有各自的特性,比如
老鼠会打洞
猫会爬树
鲨鱼会游泳
不同种类有不同的天性。而在程序员的思维中,动物是对象, 天性是这个类方法或者属性。
再延伸一下,比如Python是面向对象编程语言。有List、Str、Dict、Tuple等数据类型,这些数据类型也是对象,比如List类可以有count方法,我们可以通过count方法统计列表中各个元素的数量。
我们可以简单的将定义类理解成就是定义数据结构,同时给这种数据结构制定一些独特的属性或者方法。我们先看最简单的类,在这里我们定义了Point类

调用类之前我们要实例化,这个可以理解成神笔马良画的画,如果不将其搞活,永远是画。通过实例化,调用实例,画中对象就活了。

单继承
白马和黑马,都是马。
既然都是马,所以不论黑马白马都有马的特性,都可以奔跑。
所以我们可以定义一个基本的"马类",之后让"白马类"和"黑马类"继承自"马类"
像白马和黑马继承马,这就是单继承。因为只是继承了 一个基类。现在我们定义一个Circle类, 圆是由圆心和半径决定的,所以Circle会继承并使用Point的一些特性。

现在我们看看Circle

代码运行结果

多继承
多继承,顾名思义就是某个类继承了多个父类(基类)

继续

运行结果

现在已经有了Point、Size类,以及每个类中的String()方法。现在想构建正四方形Rectangle类。为了让Rectangle具有Point和Size的一些特性,需要让Rectangle继承Point和Size的一些特有的方法。

Rectangle继承了Point和Size两个类,使得Rectangle不用定义x、y、width、height。而且Rectangle的String方法可以直接调用Point和Size对象的String方法。
