获取错误的方法调用是平铺的。路径= false
def createMaze():
def createTileMatrix():
for x in range(size):
for y in range(size):
tile = tiles.tiles()
tile.path = False
if(x == 0 or y == 0 or x == size - 1 or y == size -1):
tile.border = True
else:
tile.border = True
tile.wall = True
tile.lit = False
tile.string = False
tile.spawn = False
tileMatrix[x][y] = tile
下面是导致错误的tiles类的部分
path = None
wall = None
string = None
topLeftXCoord = None
topLeftYCoord = None
spawn = None
lit = None
border = None
sprite = None
@property
def path(self):
return self.path
@path.setter
def path(self, c):
if c == True or c == False:
self.path = c
else:
raise Exception("cannot set path equal to a non boolean function")
某种原因导致Python达到了递归的极限。我的调试器显示,如果c == True或c == False:和self,代码在行与行之间循环。我不确定是什么导致了这个错误 问题来源StackOverflow 地址:/questions/59385311/python-variable-setter-causing-recursive-limit-to-be-reached
因为path是属性的名称,所以需要一个单独的变量来存储实际的值;通常命名为_path(带下划线)。否则,你的getter会递归地调用自身setter也是如此;行自我。setter中的path = c是导致对setter的递归调用的原因,因为setter像self一样处理所有的赋值。路径= .... 下面是一个如何正确做这件事的例子:
class Example:
def __init__(self, foo):
self.foo = foo
@property
def foo(self):
return self._foo
@foo.setter
def foo(self, value):
if value >= 0:
self._foo = value
else:
raise ValueError()
注意,带下划线的_foo只需要在getter和setter中使用;其他方法,比如_init__可以也应该使用foo(没有下划线)来调用getter或setter。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。