在Python中(包括比较成熟的面向对象语言,比如Java, C#)中,一般只能进行单继承,当然C++是多继承的。多继承会使得继承结构比较复杂,不容易理清,这估计就是为什么后来新的面向对象语言中,没有多继承的原因。虽然这些语言不能进行多继承,但可以通过接口来替代,比如让类实现多个接口,效果一样。

说了这么多,再回到Python来,我之前以为Python中也只能实现单一继承,后来才知道可以多重继承。 下面是一个多重继承的例子。
分别有三个类,Point、Size、Rectangle类,Rectangle继承Point和Size,程序很简单,比较好理解。

class Point:x = 1.0y = 2.0z = 3.0def __init__(self, x, y):self.x = xself.y = yprint("Point Constructor")def __str__(self):return "{X:" + str(self.x) + ",Y:" + str(self.y) + "}"class Size:width = 0.0height = 0.0def __init__(self, width, height):self.width = widthself.height = heightprint("Size Constructor")def __str__(self):return "{Height:" + str(self.height) + ",Width:" + str(self.width) + "}"class Rectangle(Point, Size):def __init__(self, x, y, height, width):Point.__init__(self, x, y)Size.__init__(self, height, width)print("Rectangle Constructor")def __str__(self):return Point.__str__(self) + "," + Size.__str__(self)x1 = Point(3, 4)
t1 = Size(10, 10)
p1 = Rectangle(3, 4, 10, 10)
print(x1)
print(t1)
print(p1)
print(x1.z)

输出结果

Point Constructor
Size Constructor
Point Constructor
Size Constructor
Rectangle Constructor
{X:3,Y:4}
{Height:10,Width:10}
{X:3,Y:4},{Height:10,Width:10}
3.0

一般如果要在子类中调用父类被覆盖的方法,使用super().method(),这种方法适合单继承。 上面的例子是多继承,有两个子类的__init__()方法,因此需要使用父类的名称,就像上面程序中使用的那样。

Point.__init__(self, x, y)
Size.__init__(self, height, width)

Python中使用多重继承相关推荐

  1. Python中的多重继承

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击http://www.captainbed.net 继承是面向对象编程的一个重要的方式,通过继承,子类就 ...

  2. Python 中的类与继承

    类的定义以及实例的建立 Python中,类通过 class 关键字定义. 例如最简单的一个类定义可以为: class Person(object):pass Python 的编程习惯,类名以大写字母开 ...

  3. python中构造方法可以被继承吗_python – 类继承:构造函数应该兼容吗?多重继承的情况?...

    是否建议它也适用于构造函数?我主要考虑Python及其__init __()方法,但这个问题适用于任何具有继承的面向对象语言. 我问这个问题,因为有一个子类从一个或多个类继承,提供一些不错的默认行为( ...

  4. python中的新式类与旧式类的一些基于descriptor的概念(上)

    python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...

  5. Python中的super()用法

    Python中的super()方法设计目的是用来解决多重继承时父类的查找问题,所以在单重继承中用不用 super 都没关系:但是,使用 super() 是一个好的习惯.一般我们在子类中需要调用父类的方 ...

  6. python中append函数合并列表且列表内数字从高到低_35个高级Python知识点总结

    No.1 一切皆对象 众所周知,Java中强调"一切皆对象",但是Python中的面向对象比Java更加彻底,因为Python中的类(class)也是对象,函数(function) ...

  7. python中的继承有什么特点_python类的继承是什么?类的继承有什么样的规则?

    在这篇文章之中我们来了解一下python类的继承,对于刚刚接触到python这一编程语言的朋友来说,对于python类的继承的了解应该比较少,不过没关系,在接下来的文章之中我们就来了解一下python ...

  8. 在Python中创建单例

    这个问题不是为了讨论是否需要单例设计模式 ,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式. 在这种情况下,我定义"最pytho ...

  9. python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景

    装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...

最新文章

  1. C#分析数据库结构,使用XSL模板自动生成代码
  2. ORACLE分页查询SQL语法——最高效的分页
  3. C#中的线程(二) 线程同步基础
  4. verilog设计UART发送接收及各种错误仿真
  5. [C#]利用键代码自动转换生成字母键或其它键信息
  6. pytorch入门使用
  7. [design decision] user awareness: 自动安装还是不自动安装?
  8. 【欢迎白嫖】新·vbs表白代码
  9. 查看maven,JDK版本号
  10. JS汉字转拼音带音标
  11. 小程序微信JSAPI支付进行退款操作
  12. Unbuntu16.04下cmake-gui安装
  13. Java通过HAPI解析HL7消息
  14. 【工业设计公司】产品外观设计的重要性
  15. 相亲遇到喜欢的IT男有感
  16. 金仓数据库 KingbaseGIS 使用手册(6.8. 几何对象输入函数)
  17. 电脑没有串口怎么办?
  18. Java-web css笔记
  19. java有关的论述_中国大学MOOC: 以下有关JAVA线程的论述,正确的是()。
  20. 工具:Excel使用指南

热门文章

  1. java定时任务,每天定时执行任务
  2. case 语句不跳转,死循环
  3. freeMarker自定义函数的使用
  4. 14条建议,使你的IT职业生涯更上一层楼
  5. painticon java_新人,关于java的 paintIcon()方法
  6. Spark- Checkpoint原理剖析
  7. 【githubgit】1、github中的watch、star、fork的作用
  8. 【BZOJ】1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚(dp/线段树)
  9. 《0 bug ---- C/C++商用工程之道》目录
  10. 【正一专栏】巴萨西甲冠军遇到挑战