当前位置: 首页 > 面试题库 >

多重继承如何与super()和不同的__init __()参数一起使用?

寇涵容
2023-03-14
问题内容

我只是在研究一些更高级的python主题(至少对我来说是高级的)。我现在正在阅读有关多重继承以及如何使用super()的信息。我或多或少了解超级函数的使用方式,但是
(1)像这样做是 怎么回事?:

class First(object):
    def __init__(self):
        print "first"

class Second(object):
    def __init__(self):
        print "second"

class Third(First, Second):
    def __init__(self):
        First.__init__(self)
        Second.__init__(self)
        print "that's it"

关于super(),关于Python Warts的Andrew
Kuchlings论文
说:

当Derived类继承自多个基类并且其中一些或全部具有 init 方法时,super()的用法也将是正确的

因此,我将上面的示例重写如下:

class First(object):
    def __init__(self):
        print "first"

class Second(object):
    def __init__(self):
        print "second"

class Third(First, Second):
    def __init__(self):
        super(Third, self).__init__(self)
        print "that's it"

但是,这只会运行它可以找到的第一个 initFirst(2)可以super()用来同时运行fromFirst和的init
Second,如果可以,如何运行?
运行super(Third, self).__init__(self)两次只会先运行。 初始化
()两次。

再增加一些混乱。如果继承的类的 init ()函数采用不同的参数怎么办。例如,如果我有这样的事情怎么办:

class First(object):
    def __init__(self, x):
        print "first"

class Second(object):
    def __init__(self, y, z):
        print "second"

class Third(First, Second):
    def __init__(self, x, y, z):
        First.__init__(self, x)
        Second.__init__(self, y, z)
        print "that's it"

(3)如何使用super()为不同的继承类init函数提供相关的参数?

欢迎所有提示!

ps。由于我有几个问题,因此我将它们加粗并编号。


问题答案:

对于问题2,您需要在每个类中调用super:

class First(object):
    def __init__(self):
        super(First, self).__init__()
        print "first"

class Second(object):
    def __init__(self):
        super(Second, self).__init__()
        print "second"

class Third(First, Second):
    def __init__(self):
        super(Third, self).__init__()
        print "that's it"

对于问题3,这无法完成,您的方法需要具有相同的签名。但是您可以忽略父句中的某些参数或使用关键字参数。



 类似资料:
  • 本文向大家介绍Python的super()如何与多重继承一起使用?,包括了Python的super()如何与多重继承一起使用?的使用技巧和注意事项,需要的朋友参考一下 在解释super() 之前,我们首先需要了解多重继承的概念。 多重继承:意味着一个子类可以继承多个父类。 在以下示例中,子类从父类继承了属性方法。 示例 输出结果 在下面的示例中,显示了(即)   super()具有多个继承 sup

  • 问题内容: 我在使用Python进行面向对象的编程方面非常陌生,并且在理解函数(新样式类)时遇到困难,特别是在涉及多重继承时。 例如,如果你有类似的东西: 我不明白的是:该类会继承两个构造函数方法吗?如果是,那么哪个将与一起运行,为什么? 而如果要运行另一个呢?我知道这与Python方法解析顺序有关。 问题答案: Guido自己在他的博客文章(包括两次较早的尝试)中对此进行了合理的详细说明。 在你

  • 假设我有对象:bob1,cob2。我想为类B和C建立一个析构函数,但我不确定如何销毁B.BB和C.CC以及如何访问它们。还有,有没有办法让我做到这一点,而不让类成为a类的朋友?

  • 问题内容: 考虑以下python代码段 我想知道我是如何能够及格,并以相应的基类的构造函数。 问题答案: 好吧,一般而言,在处理多重继承时,您的基类(不幸的是)应该 设计为多重继承 。类和在你的例子都没有,这样的话你找不到适用有道的。 设计基类以进行多重继承的一种常见方法是,中级基类在其方法中接受他们不打算使用的额外的args ,并将它们传递给调用。 这是在python中执行此操作的一种方法: 这

  • 问题内容: 我是刚开始学习Python的Java人。举个例子: 我肯定有很多冗余代码(我知道在Java中,上面的代码有很多冗余)。 对于已经从父类继承了哪些属性,哪些部分是多余的? 问题答案: 在python中为类编写函数时,应始终调用其超类的函数。我们可以使用它直接将相关属性传递给超类,因此您的代码如下所示: 正如其他人指出的那样,您可以替换该行 与 并且代码将执行相同的操作。这是因为pytho

  • 问题内容: 在Python中,如何选择要调用的Parent方法?假设我要调用父ASDF2的方法。似乎我必须在super()中指定 ASDF1 。如果要调用ASDF3 ,则必须指定 ASDF2 吗? 在我看来是疯子。我究竟做错了什么? 问题答案: 那不是为了什么 超级基本上是按照特定顺序选择一个(或全部)父母。如果您只想调用单亲方法,请执行此操作