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

如何避免使用super()进行无限递归?

司徒俊健
2023-03-14
问题内容

我有这样的代码:

class A(object):
    def __init__(self):
          self.a = 1

class B(A):
    def __init__(self):
        self.b = 2
        super(self.__class__, self).__init__()

class C(B):
    def __init__(self):
        self.c = 3
        super(self.__class__, self).__init__()

实例化B可以按预期工作,但是实例化C无限递归并导致堆栈溢出。我该如何解决?


问题答案:

实例化C调用时B.__init__self.__class__仍然是C,因此super()调用将其带回B。

调用super()时,请直接使用类名。因此,在B中,请致电super(B, self),而不是super(self.__class__, self)(最好super(C, self)在C中使用)。在Python 3中,您可以仅使用不带参数的super()来实现同一目的



 类似资料:
  • 问题内容: 我想定义一个包含和方法的类,可以按如下方式调用该类: 为了不使用隔行扫描类,我的想法是覆盖和方法并检查给定名称是否将return重定向到。但是我遇到了无限递归的问题。示例代码如下: 正如在代码中尝试创建新属性一样,它调用,再次调用,依此类推。我怎么需要更改此代码,即,在这种情况下,一个新的属性的创建,持有的价值? 还是有更好的方法来处理“映射”到的呼叫? 总是有关于为什么的问题:我需要

  • 问题内容: 我被分配了一个项目来开发一组用作存储系统接口的类。要求是该类支持具有以下签名的get方法: 基本上,该方法应该返回与if和仅在after之后被修改的对象相关联。如果存储系统不包含,则该方法应返回null。 我的问题是这样的: 如何处理场景的关键存在,但对象已经 不 被修改? 这很重要,因为使用此类的某些应用程序将是Web服务和Web应用程序。这些应用程序将需要知道是返回404(未找到)

  • 问题内容: 我使用hibernate方式检索兄弟列表 Hibernate是在兄弟列表中使用惰性选择配置的,在Java端这是可行的,但是问题是当我想将Brother对象序列化为JSON时。 例如,布莱恩(Bryan)可以将马克(Mark)当作兄弟,反之亦然… 我该如何解决?有什么办法可以指示对杰克逊库的最大递归次数? 我的代码,真的很简单。 问题答案: 由于 循环参考出现问题 。 由于您可以使用两个

  • 问题内容: 我正在编写一个函数,该函数最多可以调用5000次。当然,我得到了。有什么办法可以以一种非常简单的方式重写此代码?: 顺便说一下,我们可以调用这些函数的深度有什么限制? 问题答案: 使用显式的对象堆栈和循环,而不是调用堆栈和递归:

  • 问题内容: 我目前使用Zend_Db来管理查询。我已经编写了执行以下查询的代码: 假设Zend_Db可以,我在不清理输入的情况下完成了此操作。Zend会这样做吗? 另一个问题:Zend_Db是否清除并查询? 谢谢。 问题答案: 当我是该项目的团队负责人(直到1.0版)时,我在Zend Framework中编写了很多用于数据库参数和引用的代码。 我尽力鼓励最佳做法,但必须在易用性之间取得平衡。 请注