首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多重继承和多级继承

多重继承和多级继承
EN

Stack Overflow用户
提问于 2017-11-25 06:19:36
回答 1查看 307关注 0票数 0

是的,所以我必须为一个学校项目创建继承层次结构,所以忽略了某些冗余(比如Square实际上不需要两个父母),我遇到了一种奇怪的Python处理超级调用的方式。

当在下面的代码中初始化一个正方形时,它调用它的super,后者执行矩形的初始化方法。这是有道理的。然后矩形调用它的超级函数,这个函数应该转到平行四边形的初始化方法;然而,经过一些调试后,我发现当它进行超级调用时,它实际上是在调用菱形的初始化方法。有人能解释一下这里发生了什么吗?如果可能的话,有一种方法可以在不显式使用类名的情况下正确实现这一点吗?

相关代码如下。

代码语言:javascript
复制
class Parallelogram:
    def __init__(self, base, side, theta):
        self.base = base
        self.side = side
        self.theta = theta

class Rectangle(Parallelogram):
    def __init__(self, base, side):
        super(Rectangle, self).__init__(base, side, 90)

class Rhombus(Parallelogram):
    def __init__(self, side, theta):
        super(Rhombus, self).__init__(side, side, theta)

class Square(Rectangle, Rhombus):
    def __init__(self, side):
        super(Square, self).__init__(side, side)
EN

回答 1

Stack Overflow用户

发布于 2017-11-25 07:10:36

您可以通过调用类对象的mro检查继承的执行顺序

代码语言:javascript
复制
In [257]: Square.__mro__
Out[257]: 
(__main__.Square,
 __main__.Rectangle,
 __main__.Rhombus,
 __main__.Parallelogram,
 object)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47480649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档