Python嵌套内部类如何访问外层类实例变量且避免递归错误?
问题解决方案
报错原因
- 递归溢出是因为
Buildable构造方法中重复实例化Character,而Character实例化时又会创建Buildable对象,形成无限调用循环 - 直接写
Character.resources属于语法错误,resources是Character的实例属性,不能通过类名直接访问
修复后代码(BW_Classes.py)
class Character: # Constructor def __init__(self): self.name = "Pickle" self.health = 100 self.resources = ["Fire", "Coal"] # 实例化内部类时传入当前Character实例 self.buildObj = self.Buildable(self) # Function to display character info def characterInfo(self): print("CharacterInfo --> " + "Name:", self.name, "| Health:", self.health, "| Resources:", self.resources) def printRes(self): print(self.resources) # Function for collecting resources def collectResource(self, newResource): self.resources.append(newResource) class Buildable: def __init__(self, outer_character): self.buildings = ["Fire 1"] self.upgradeStatus = 0 # 保存外层Character实例引用,不再新建Character实例 self.outer = outer_character def displayBuildable(self): print("Buildables -->", self.buildings) def createBuildable(self, newBuilding): self.buildings.append(newBuilding) def upgradeBuildable(self, replaceBuilding): if self.upgradeStatus == 0: # Update selected building for i in range(len(self.buildings)): if self.buildings[i] == replaceBuilding: self.buildings[i] = "2x" break # 通过保存的外层实例引用访问resources print(self.outer.resources) self.upgradeStatus = self.upgradeStatus + 1 print(self.upgradeStatus)
运行说明
原有主程序代码无需任何修改,直接运行即可在内部类方法中打印当前关联的Character实例的resources属性值。
内容的提问来源于stack exchange,提问作者tristan bottone
相关产品推荐
相关产品推荐

