You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:39:01