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

python中的链调用父初始化程序

马天逸
2023-03-14
问题内容

这个问题已经在这里有了答案

如何在Python中调用超级构造函数? (7个答案)

4年前关闭。

考虑一下-基类A,类B从A继承,类C从B继承。在初始化器中调用父类初始化器的通用方法是什么?如果这听起来仍然不太明确,请使用以下代码。

class A(object):
    def __init__(self):
        print "Initialiser A was called"

class B(A):
    def __init__(self):
        super(B,self).__init__()
        print "Initialiser B was called"

class C(B):
    def __init__(self):
        super(C,self).__init__()
        print "Initialiser C was called"

c = C()

这就是我现在的做法。但它似乎仍然有点非通用-您仍然必须手动传递正确的类型。

现在,我尝试使用self.__class__super()作为第一个参数,但是,显然,它不起作用-如果将其放在C的初始化程序中-
足够公平,B的初始化程序将被调用。如果您在B中执行相同的操作,则“ self”仍指向C的实例,因此最终您再次调用B的初始化程序(此操作以无限递归结束)。

现在无需考虑钻石继承,我只是想解决这个特定问题。


问题答案:

确实推荐这样做(对于Python 2.x)。

是否将类显式传递给super对象的问题是样式问题,而不是功能问题。通过该类以super符合Python的“显式优于隐式”的哲学。



 类似资料:
  • 问题内容: 因此,我刚刚升级到Xcode 6.3 Beta 3,出现了许多与以下内容有关的错误: 初始化程序不会覆盖其父类中的指定初始化程序。 例如,这是一个类: 这是我的课程之一: 问题答案: 我的解决方案是一种快速解决方案,但我认为它比Apple在发行说明中的​​用途要容易。有关更多信息,请在此处搜索19775924 http://adcdownload.apple.com//Develope

  • 经过一些调试,我找到了这行代码 导致我的应用程序崩溃,我已经尝试过了 ; 但结果还是一样,有什么帮助吗??

  • 10.6.1.程序初始化 现在用户启动程序就会首先看到Timeline界面。但是用户必须先设置个人选项并启动Service,否则就没有消息显示。这很容易让人摸不着头脑。 一个解决方案是,在启动时检查用户的个人选项是否存在。若不存在,就跳到选项界面,并给用户一个提示,告诉她下一步该怎么做。 ... @Override protected void onCreate(Bundle savedInsta

  • 根据此堆栈溢出问题的公认(且唯一)答案, 使用 将改为零初始化对象。 那么,为什么呢?, 生成此输出: 定义的两个构造函数都是默认的?正当对于POD类型,默认初始化为零初始化。 根据这个问题的公认答案, 如果POD成员未在构造函数中初始化,也未在类初始化中通过C11初始化,则默认为已初始化。 不管是堆栈还是堆,答案都是一样的。 在C 98中(而不是之后),new int()被指定为执行零初始化。

  • 我需要在OpenEJB中以“暂停”状态启动一个队列,以便在某些相关数据可用之前,消费者不会处理任何消息。我可以按此处所示以编程方式暂停队列,因此如果在创建队列时调用了一些初始化函数,我可以使用该方法。队列配置文档似乎不支持设置暂停状态。关于如何在创建时配置队列,有什么想法吗?

  • Rails 应用的初始化过程 本章节介绍了 Rails 4 应用启动的内部流程,适合有一定经验的Rails应用开发者阅读。 通过学习本章节,您会学到如下知识: 如何使用 rails server; Rails应用初始化的时间序列; Rails应用启动过程都用到哪些文件; Rails::Server接口的定义和使用; 本章节通过介绍一个基于Ruby on Rails框架默认配置的 Rails 4 应

  • 问题内容: 我正处于“操作方法”阶段,想知道服务器启动时是否有一种方法可以调用。 这将类似于Web应用程序,当我将托管bean与一起使用时:启动容器时,将对带注释的类进行实例化,并且可以从其构造函数中调用所需的任何东西。 有什么帮助吗? 问题答案: 因此,如果您用于服务请求,则可以创建,如果已经部署了应用程序,则在部署或服务器启动时将调用方法。 为此,创建将实现的类: 然后在您的中定义该监听器:

  • 问题内容: 我在python中初始化2D数组时遇到问题。我想要一个6x6的阵列,我做到了 但是当我这样做时: 注意,我只设置了1个项目,并且在所有行上都设置了“ replicated”。怎么了?我认为它与引用相同的列表有关,但是我该如何解决呢? 我估计 可以,但是初始化一个空的6x6数组似乎很长,如果我想要10000x10000数组怎么办,效率会很低? 更新 我还可以初始化2D数组的字典吗?我有一