【问题标题】:Calling Grandfather class method results in RecursionError (maximum recursion depth exceeded)调用 Grandfather 类方法导致 RecursionError(超出最大递归深度)
【发布时间】:2023-03-15 20:26:02
【问题描述】:

我试图调用祖父方法并得到以下错误(RecursionError):

class GrandParent:
    def get_data(self):
        return 5


class Parent(GrandParent):
    def get_data(self):
        return super(self.__class__, self).get_data()


class Child(Parent):
    def get_other_data(self):
        d = self.get_data()
        print(d)
        return d


demo = Child()
res = demo.get_other_data()
print('done')

我收到以下错误:

RecursionError: maximum recursion depth exceeded while calling a Python object

这是为什么呢?

我试图查看这个:RecursionError: maximum recursion depth exceeded while calling a Python object(Algorithmic Change Required),但似乎我们不应该有任何递归问题。

提前致谢!!!

【问题讨论】:

    标签: python recursion inheritance


    【解决方案1】:

    self 是动态绑定的,这意味着它具有实际创建的对象的类型,在本例中为 Child

    以下是上述案例中发生的情况:

    class Parent(GrandParent):
        def get_data(self):
            return super(self.__class__, self).get_data()
    

    评估为

    class Parent(GrandParent):
        def get_data(self):
            return super(Child, self).get_data()
    

    这是

    class Parent(GrandParent):
        def get_data(self):
            return Parent.get_data(self)
    

    您现在可以看到为什么这是一个无休止的递归了。


    Python 2.7 最佳实践:

    class Parent(GrandParent):
        def get_data(self):
            return super(Parent, self).get_data()
    

    Python 3+:

    class Parent(GrandParent):
        def get_data(self):
            return super().get_data()
    

    【讨论】:

      猜你喜欢
      • 2017-03-24
      • 2020-10-08
      • 2020-07-13
      • 2018-09-24
      • 1970-01-01
      • 2020-11-28
      • 2019-01-18
      • 2017-11-07
      • 2021-01-10
      相关资源
      最近更新 更多