返回顶部
首页 > 资讯 > 后端开发 > Python >python3中多重继承的问题
  • 287
分享到

python3中多重继承的问题

2023-01-31 01:01:09 287人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本来以为多重继承很简单,但是多看了一些资料后发现还是挺复杂的。 如果继承情况简单就还比较好理解,但是如果继承的情况太过于复杂的话,python3 中会使用拓扑排序的方式来寻找继承的父类。 有关继承的拓扑排序 关于这方

本来以为多重继承很简单,但是多看了一些资料后发现还是挺复杂的。
如果继承情况简单就还比较好理解,但是如果继承的情况太过于复杂的话,python3
中会使用拓扑排序的方式来寻找继承的父类。
有关继承的拓扑排序
关于这方面看上面的文章就可以了。
我下面给出除此之外的一些说明

class A(object):
    def f(self):
        print('A')
class B(object):
    def f(self):
        print('B')
class C(A,B):
   pass
s = C()
s.f()
#A

由上面代码的输出可以看出,当前子类继承多个父类的时候,对函数的继承会优先选择靠左边的。

class A(object):
    def f(self):
        print('A')
class B(object):
    def f(self):
        print('B')
class C(A,B):
    pass
class D(A,B):
    def f(self):
        print("D")
class E(C,D):
    pass
s = E()
s.f()
#D

上面这段代码会输出D,这个说明对于E来说它会先去看C,发现C没有就去继承D的。而并非是发现C没有,从C继承下来的最左边A中找。

class A(object):
    def f(self):
        print('A')
class B(object):
    def f(self):
        print('B')
class C(A,B):
    pass
class D(A,B):
    pass
class E(C,D):
    pass
s = E()
s.f()
#A

上面这段没啥好说的。我们下面看一段会报错的继承:

class A(object):
    def f(self):
        print('A')
class B(object):
    def f(self):
        print('B')
class C(B,A):
    pass
class D(A,B):
    pass
class E(C,D):
    pass
s = E()
s.f()
#TypeError: Cannot create a consistent method resolution
#order (MRO) for bases A, B

上面这种写法会报错。看了一些资料后发下了这段话:class E(C,D)这个类如果去掉的话也可以没有错误,如果加上这个类后,按照这种写法,会导致mro中无法在唯一确认类之间的关系,会导致继承关系混乱。(按照我的理解,虽然是按照拓扑排序查找父类,但是对于同一层的父类,他们之间的顺序定义是按下一层的继承写法来定义的(从左到右)。上面这段代码,会使得在A,B这一层无法准确确定A与B的前后关系,所以报错。)

--结束END--

本文标题: python3中多重继承的问题

本文链接: https://lsjlt.com/news/184301.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python3中多重继承的问题
    本来以为多重继承很简单,但是多看了一些资料后发现还是挺复杂的。 如果继承情况简单就还比较好理解,但是如果继承的情况太过于复杂的话,python3 中会使用拓扑排序的方式来寻找继承的父类。 有关继承的拓扑排序 关于这方...
    99+
    2023-01-31
  • C++中多重继承问题详解
    C++中多重继承问题详解引言在C++中,多重继承是一种特性,允许一个派生类从多个基类中继承属性和行为。然而,由于多重继承引入了一些复杂性,开发人员必须小心处理,以避免潜在的问题。本文将详细讨论C++中多重继承的问题,并提供具体的代码示例。基...
    99+
    2023-10-22
    C++ 多重继承 问题详解
  • C++中常见的多重继承问题解析
    C++中常见的多重继承问题解析多重继承是一种常见的面向对象编程技术,允许一个类继承多个基类。然而,多重继承也常常引发一些问题和挑战,需要开发人员仔细理解和处理。菱形继承问题菱形继承是指一个派生类同时继承了两个基类,并且这两个基类又共同继承同...
    99+
    2023-10-22
    C++ 多重继承 问题解析
  • C++多继承(多重继承)的实现
    在前面的例子中,派生类都只有一个基类,称为单继承(Single Inheritance)。除此之外,C++也支持多继承(Multiple Inheritance),即一个派生类可以有...
    99+
    2023-05-16
    C++多继承 C++多重继承
  • python 继承与多重继承
    当然,如果不支持python继承,语言特性就不值得称为“类”。派生类定义的语法如下所示: <statement-1> . . . <statement-N> 名称 BaseC...
    99+
    2023-01-31
    python
  • 多重继承
      继承是面向对象编程的一个重要的方式,通过继承,子类就可以扩展父类的功能 由于Python允许使用多重继承,因此,MixIn就是一种常见的设计 只允许单一继承的语言(如Java)不能使用MixIn的设计 通常的继承关系设计如下:   ...
    99+
    2023-01-31
  • C++中多重继承问题及解决方法的介绍
    C++中多重继承问题及解决方法的介绍在C++中,多重继承是一种强大的特性,允许一个类从多个父类派生而来。然而,多重继承也带来了一些问题和挑战,其中最常见的问题是菱形继承问题(Diamond Inheritance Problem)。菱形继承...
    99+
    2023-10-22
    解决方法 (Solutions) 多重继承 (Multiple Inheritance) 问题 (Issues)
  • python3--object类,继承与派生,super方法,钻石继承问题
    昨天内容复习组合:什么有什么的关系(例:老师有生日)class Birthday:     def __init__(self, year, month,&nb...
    99+
    2023-01-30
    钻石 方法 object
  • C++中多重继承问题及解决方法概述
    C++中多重继承问题及解决方法概述引言:在面向对象编程中,继承是一种重要的代码复用机制。C++支持多重继承,即一个子类可以同时从多个父类继承属性和方法。然而,多重继承也带来了一些问题,如命名冲突和二义性。本文将讨论多重继承问题,并介绍解决方...
    99+
    2023-10-22
    解决方法 (Solutions) 多重继承 (Multiple Inheritance) 问题 (Issues)
  • python——多重继承
    #方式一 class A():     def __init__(self, name):         self.name = name         print("a class ...") class B():     def ...
    99+
    2023-01-31
    python
  • 关于C++多重继承下虚表结构的问题
    前言 昨天写一个项目时遇到一个很诡异的现象 如下代码所示: class ParentA { public : int a=0x123456; virtual voi...
    99+
    2024-04-02
  • 函数重写与多重继承:探索继承体系中重写的复杂性
    函数重写和多重继承在结合使用时会产生复杂性,因为它会导致子类继承自多个父类的重写函数。解决此问题的关键步骤如下:识别子类中具有歧义的重写方法。使用super()方法显式调用特定父类的实现...
    99+
    2024-05-05
    多重继承 函数重写 python
  • 菱形继承问题
    目录 类的分类 新式类 经典类 菱形继承问题 C3算法与mro()方法介绍 ...
    99+
    2023-01-31
    菱形
  • 谈谈iOS中的多继承与多重代理
    前言 多继承和多重代理在swift的语言层面上是不支持的,但我们有时会遇到这样的问题: 类B和C分别继承自A,B1和B2继承自B,C1和C2继承自C.现在我们需要在B1和C1中...
    99+
    2022-06-05
    ios 多继承 多重代理
  • PHP5中怎么实现多重继承
    本篇文章给大家分享的是有关PHP5中怎么实现多重继承,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。PHP5多重继承的具体代码:< //PHP5 接口&...
    99+
    2023-06-17
  • Python中怎么创建多重继承
    本篇文章为大家展示了Python中怎么创建多重继承,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python 多重继承可能是非常有用的方法。然而,当项目达到某种程度的复杂性之后,过程代码通常会暴露出...
    99+
    2023-06-17
  • java中怎么实现多重继承
    在Java中,一个类只能直接继承自一个父类,无法直接实现多重继承。但是可以通过接口来实现类似多重继承的功能。接口是一种抽象的类,它可...
    99+
    2023-09-14
    java
  • python中的多继承
    python和C++一样,支持多继承。概念虽然容易,但是困难的工作是如果子类调用一个自身没有定义的属性,它是按照何种顺序去到父类寻找呢,尤其是众多父类中有多个都包含该同名属性。 class P1 #(object):    def foo(...
    99+
    2023-01-31
    python
  • JavaScript 继承的谜团:解决继承中令人困惑的问题
    ...
    99+
    2024-04-02
  • C++中的继承问题(继承基本概念、菱形虚拟继承的对象模型)
    目录一、继承的概念与定义格式概念及定义格式二、赋值兼容规则三、继承中的作用域四、子类的默认成员函数构造函数拷贝构造函数赋值运算符重载析构函数构造和析构函数调用顺序五、继承与友元、静态...
    99+
    2023-02-05
    C++的继承 继承基本概念 菱形虚拟继承
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作