RecursionError:计数器超出最大递归深度

问题描述 投票:0回答:1

在一个旧示例中,我尝试将计数器成员插入到类 Point 中,但是当我运行时,它不会评估错误:RecursionError:超出最大递归深度!。然而,我并没有这样的印象,这个错误发生在几年前的早期 Python 版本中。

import math
class Point():
            id=0
            def __init__(self, x, y, z:float=0):
                import sys; print(f"{self.id=}>{sys.getrecursionlimit()}")# maximum recursion depth 1000 exceeded
                self._x = x; self._y = y; self._z = z; self.id+=1
            @property
            def x(self):
                return self._x
            @x.setter# to define a "non-public member"
            def x(self, value):
               self._x=value
            @property
            def y(self):
                return self._y
            @y.setter
            def y(self, value):
               self._y=value
            @property
            def xy(self):
                return [self._x,self._y]
            @xy.setter
            def xy(self,xval,yval):
               self._x=xval;self._y=yval
            @property
            def z(self):
                return self._z
            @z.setter
            def z(self, value):
                self._z=value
            @property
            def id(self):
                return self.id
#    @id.setter
#    def id(self, value): # raise AttributeError("Can't")
#        raise WriteCoordinateError("Point Number id is read-only")
            @property
            def distance(self):
                return round(math.dist((0, 0, 0), (self._x, self._y, self._z)))
python class recursion
1个回答
0
投票

正如 JonSG 所说,这是因为你有多个 id 定义。在课堂上,你说:

id=0
。但最后,您将属性 id (现在可以称为
self.id
)定义为返回 self.id 的函数。因为
self.id
又是一个属性,所以调用一个名为
self.id()
的函数,它返回自身。

希望您现在已经清楚为什么会发生这种情况,但我再举一个例子:

def f(x):
    return f(x)

这就是你的函数的作用。

您可以将私有

id
命名为
_id
return self._id

© www.soinside.com 2019 - 2024. All rights reserved.