【问题标题】:Nested Class - How can I use outer class variables for inner class嵌套类 - 如何将外部类变量用于内部类
【发布时间】:2021-10-18 01:29:18
【问题描述】:

我为我正在开发的微型游戏创建了一个超级简单的 Character 和 Buildable 类,我创建了一个嵌套类,其中 Character 用于外部类,而 Buildable 是内部类。我正在尝试在 Buildable 中的 upgradeBuildable 函数中循环来自 Character 的资源。

class Character:

# Constructor -- Also why do comments use # and not // -_-
def __init__(self):
    self.name = "Pickle"
    self.health = 100
    self.resources = ["Fire", "Coal"]
    self.buildObj = self.Buildable()  # Object for nested 2nd class

# 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):
        self.buildings = ["Fire 1"]
        self.upgradeStatus = 0
        self.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
            print(Character.resources)
            self.upgradeStatus = self.upgradeStatus + 1
            print(self.upgradeStatus)

当我尝试从 upgradeBuildable 中的 Character 访问 print 资源属性时,我收到一个递归错误“RecursionError: maximum recursion depth exceeded”,这让我很困惑。

我要做的就是尝试打印角色在我的内部 Buildable 类中拥有的资源。非常感谢任何帮助!

我的主要如下:

from BW_Classes import Character

pick = Character()
pick.characterInfo()

# Object created for inner class -- Buildable()
build = pick.buildObj
build.displayBuildable()

print()
print("Building......")
build.createBuildable("Fire 2")
build.createBuildable("Coal Mine")
build.createBuildable("Coal Supreme")
build.createBuildable("Ocean")
build.displayBuildable()

print()
print("Upgrading....")
build.upgradeBuildable("Fire 2")
build.displayBuildable()

【问题讨论】:

  • 欢迎来到 Salesforce StackExchange!我想您可能在搜索“超出最大递归深度”后偶然发现了这里,但该站点专注于 Salesforce 平台(基于云的客户关系管理系统)。您可能正在寻找Stack Overflow

标签: python nested


【解决方案1】:

我相信您正在寻找的是Inheritance。继承基本上意味着一个类继承另一个类的属性和方法,我假设您在说嵌套类时正在寻找它们。

抛出错误是因为当您初始化角色时,函数会初始化可构建对象。初始化可构建对象时,它会初始化角色。看到循环了吗?

您的代码可能如下所示:

class Character(Buildable):
    def __init__(self):
        self.name = "Pickle"
        self.health = 100
        self.resources = ["Fire", "Coal"]

        #initialize the buildable class
        super().__init__()

    # 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):
        self.buildings = ["Fire 1"]
        self.upgradeStatus = 0

    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
            print(Character.resources)
            self.upgradeStatus = self.upgradeStatus + 1
            print(self.upgradeStatus)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-11
    • 2014-10-30
    • 2022-11-10
    • 1970-01-01
    • 2014-12-04
    • 2021-01-05
    • 2013-01-14
    • 2018-08-25
    相关资源
    最近更新 更多