File "C:\Users\kevin\Documents\Programs\ParLumen\trait.py", line 76, in __str__
ret_str = super().__str__()
File "C:\Users\kevin\Documents\Programs\ParLumen\trait.py", line 39, in __str__
ret_str += f'{self.name}\n'
RecursionError: maximum recursion depth exceeded
还有很多很多行,但是只是重复相同的两行,最后一行不同的是,“RecursionError: maximum recursion depth exceeded”
我不太确定为什么会这样。
这是导致问题的代码:
from abc import ABC, abstractmethod
from enum import Enum, unique
from parlumen.game import *
# Base Trait class
class Trait(ABC):
def __init__(self, name, short_desc="No Desc", long_desc=None):
self.name = name
# self.value = value # may restrict this with req. 'avail_values()' func
"""
if short_desc is not "No Desc":
self.short_desc = short_desc
"""
self.short_desc = short_desc
if long_desc is None:
self.long_desc = self.short_desc
else:
self.long_desc = long_desc
@abstractmethod
def __str__(self):
ret_str = ""
ret_str += f'{self.name}\n'
ret_str += f'{self.long_desc}'
return ret_str
# Area of Effect Definition
@unique
class Focus(Enum):
NoFocus = 'None'
Origin = 'Origin'
Reversed = 'Reversed'
class AreaOfEffect(Trait):
def __init__(self, area, focus=None):
super().__init__(self, "Area of Effect")
self.area = area
if focus is None :
self.focus = Focus.NoFocus
else:
self.focus = focus
self.long_desc = f"Gives an attack or spell an area of effect of self.area"
def __str__(self):
ret_str = super().__str__()
ret_str += f"\nArea of Effect: {self.area}, Focus: {self.focus}"
return ret_str
aoe = AreaOfEffect(3, Focus.Origin)
print(aoe)
更具体地说,这个问题似乎与我的 __str__ 方法有关 Trait 似乎不喜欢 self.name 或 self .long_desc - 即问题发生的时间。
总的来说这是一团糟,但我真的想在继续之前弄清楚这一点。奇怪的是它只发生在 Trait 而不是子类 AreaOfEffect 的 __str__
请您参考如下方法:
你需要改变:
super().__init__(self, "Area of Effect")
收件人:
super().__init__("Area of Effect")
您正在将 name 设置为对象实例,然后在尝试格式化 name 时递归调用 str。
