通过子对象的_str__函数从父类打印信息时出现的问题

2024-10-01 19:19:57 发布

您现在位置:Python中文网/ 问答频道 /正文

CHARCLASSDICT = {
    'warrior': {'lvl': 4, 'hp': 50, 'sp': 30, 'mp': 15,
                'str': 10, 'def': 8, 'dex': 8, 'int': 4, 'end': 6, 'fai': 2, 'chr': 4, 'lck': 2},

class LivingBeing(object):
    # Class that defines the values of living beings inside the game space.
    def __init__(self, name, health, strength, defense, dexterity, intelligence, description):
        # Base attributes:
        self.name = name
        self.health = health
        self.description = description

        # Base skills:
        self.strength = strength
        self.defense = defense
        self.dexterity = dexterity
        self.intelligence = intelligence

class Hero(LivingBeing):
    # Base class for the player.
    def __init__(self, playertype):
        # Basic player variables:
        self.stamina = CHARCLASSDICT[playertype]['sp']
        self.mana = CHARCLASSDICT[playertype]['mp']
        self.level = CHARCLASSDICT[playertype]['lvl']
        self.charclass = 'Adventurer'

        # Additional player skill attributes:
        self.endurance = CHARCLASSDICT[playertype]['end']
        self.faith = CHARCLASSDICT[playertype]['fai']
        self.charisma = CHARCLASSDICT[playertype]['chr']
        self.luck = CHARCLASSDICT[playertype]['lck']

        super(Hero, self).__init__('Unknown', 50,
                           CHARCLASSDICT[playertype]['str'],
                           CHARCLASSDICT[playertype]['def'],
                           CHARCLASSDICT[playertype]['dex'],
                           CHARCLASSDICT[playertype]['int'])

player = Hero('warrior')

上面的代码概述了我基于文本的RPG的基本变量。我所做的是通过字典定义字符类信息,即“战士”或“骑士”类的值,并向用户提供原始输入以选择他们的类。对于这个例子,我在命令player类变量时只调用'warrior:player = Hero('warrior')

也就是说,一旦我通过调用一个类实例应用了字典的值,我希望能够与播放器确认更改。为此,我认为在player类中创建__str__函数是最简单的方法

class Hero(LivingBeing):
    def __init__(...)
        ...

    def __str__(self):
        details = """Name: {0}, Class: {1}, Level: {2}, Stamina: {3}, Mana: {4} //
                     STR: {5}, DEF: {6}, DEX: {7}, INT: {8}, FAI: {9}, CHR: {10}, LCK: {11}"""

        return details.format(self.name, self.charclass, self.level, self.stamina, self.mana,
                              self.strength, self.defense, self.dexterity, self.intelligence,
                              self.faith, self.charisma, self.luck)

然而,我面临的问题是当我转到print player时。它返回一个错误,表示英雄对象没有力量属性。我是否误解了__str__函数的概念以及它在类继承中的工作方式


Tags: nameselfinitdefstrengthclassintelligencedexterity

热门问题