Python 在运行时更改类实例的属性值

Python 在运行时更改类实例的属性值,python,Python,我正在创建一个小游戏,它依赖于用户选择来确定他/她想要的角色的统计信息。游戏包括由玩家“种族”决定的“统计数据”。我遇到了一些问题,因为我需要在运行时完成此操作。我不确定我需要做什么来完成这一点,任何帮助将不胜感激 实现必须能够支持将来添加运行时确定的因素,如“派系”和“性别”。这只是一个考虑,并不是要求迄今为止实施这一点 class Character: def __init__(self, name, gender, race, faction): self.play

我正在创建一个小游戏,它依赖于用户选择来确定他/她想要的角色的统计信息。游戏包括由玩家“种族”决定的“统计数据”。我遇到了一些问题,因为我需要在运行时完成此操作。我不确定我需要做什么来完成这一点,任何帮助将不胜感激

实现必须能够支持将来添加运行时确定的因素,如“派系”和“性别”。这只是一个考虑,并不是要求迄今为止实施这一点

class Character:
    def __init__(self, name, gender, race, faction):
        self.playerName = name
        self.playerGender = gender
        self.playerRace = race
        self.playerFaction = faction
        self.setPlayerStats("","","","","")
#CHARACTER STATS
    def setPlayerStats(self, mining, manufacturing, exploration, invention, trading):
        self.mining = mining
        self.manufacturing = manufacturing
        self.exploration = exploration
        self.invention = invention
        self.trading = trading

    def playerStats(self):
        self.setPlayerStats(0, 0, 0, 0, 0)
#CHARACTER CLASSES
class Dwarf(Character):
    def playerStats(self):
        self.setPlayerStats(3, 1, 0, 1, 0)

class Elf(Character):
    def playerStats(self):
        self.setPlayerStats(0, 1, 0, 1, 3

    def setPlayerRace(self):
        self.playerRace = "Elf"

class Human(Character):
    def playerStats(self):
        self.setPlayerStats(1, 1, 1, 1, 1)

    def setPlayerRace(self):
        self.playerRace = "Human"

class Orc(Character):
    def playerStats(self):
        self.setPlayerStats(0, 2, 2, 1, 0)

    def setPlayerRace(self):
        self.playerRace = "Orc"
当前实现方法的问题不是实际设置这些变量,因为它没有设置为“character”类的实例。我被告知这是一个运行时问题,我不熟悉如何在Python中做到这一点

print("Please choose the numerical value assigned to the option you wish to select:")
        print("1) Dwarf 2) Elf 3) Human 4) Orc")
        userInput = input(str("Input your character`s race: "))
        if userInput == "1":
            player1 = Dwarf("","","","")
            break
        elif userInput == "2":
            player1 = Elf("","","","")
            break
        elif userInput == "3":
            player1 = Human("","","","")
            break
        elif userInput == "4":
            player1 = Orc("","","","")
            break
        else:
            input("Invaild Input! Press any button to try again...")

您缺少
Elf(角色)的右括号。playerStats

class Elf(Character):
    def playerStats(self):
        self.setPlayerStats(0, 1, 0, 1, 3
此外,还有许多
break
语句不在循环中

elif userInput == "2":
    player1 = Elf("","","","")
    break
“玩家”一词通常指坐在电脑前的人(或AI,或玩游戏的人)。玩家控制的角色不是玩家。例如,玩家经常在键盘上打字,而“玩家控制的角色”可能挥舞剑,或从弓上发射箭。为了避免混淆,我建议您在单词“
player
”上应用
edit>replace
。首先,播放器需要GUI(图形用户界面),而播放器控制的角色则不需要。您可能希望在某个时候创建一个
player
类来处理用户输入。或者,一个玩家可能“拥有”几个不同的角色。木偶和木偶演员是不同的东西

设置统计数据很容易:

Create a character
character = Orc("Mr. Orc", "male", "Orc", "zebra faction")
# Below, set the stats at runtime 
character.mining = 455
print(character.mining)
character.setPlayerStats(self, mining=1, manufacturing=2, exploration=3, invention=4, trading=5)
如果您想为整个比赛设置统计数据,可以编写如下内容:

class Race:
    def __init__(self, mining, manufacturing, exploration, invention, trading):
        self.mining = mining
        self.manufacturing = manufacturing
        self.exploration = exploration
        self.invention = invention
        self.trading = trading

Dwarf = Race(3, 1, 0, 1, 0)

class Character:
    def __init__(self, name, gender, race:Race, faction):
        self.playerName = name
        self.playerGender = gender
        self.playerRace = race
        self.playerFaction = faction
#CHARACTER STATS
    def getTotalStats(self):
        return (
            self.race.mining + self.mining_bonus,
            self.race.manufacturing + self.manufacturing_bonus,
            self.race.exploration + self.exploration,
            self.race.invention + self.invention,
            self.race.trading + self.trading,
        )

我不明白你的问题是什么。我想知道如何设置包含运行时玩家统计值的角色比赛的值。目前,我无法设置链接到角色实例的值。您是否可以编辑问题以显示产生不需要的输出或错误的代码,显示此输出/错误以及所需的输出或行为?您是否确实需要编写不同的代码来解释人类/矮人/精灵如何以不同方式工作,或者,您可以通过迄今为止显示的数据来完成这一切吗?至少不要考虑子类,至少在你证明了一个需要之前。你应该把这场竞赛作为一个论点:<代码> PrReR1 =侏儒(“,”,“侏儒”,“”)< /代码>。