首页 > 解决方案 > (类名)没有属性(属性)

问题描述

我正在尝试创建一个 DnD 风格的地牢爬行游戏。我使用 5E SRD 和其他公开信息作为我的角色和游戏玩法的基础。目前我正在研究角色生成器,似乎进展顺利,但在尝试分配种族奖励时遇到了障碍。我已经将种族设置为他们自己的子类,每一个都有它独特的奖金。当我尝试根据角色的种族分配适当的奖金时,我得到一个 (Classname)has no attribute (attribute) 错误。

python
    class Race:
    def __init__(self, race):
        self.name = race
        self.racial_str_bonus = 0
        self.racial_char_bonus = 0


class Dragonborn(Race):
    def __init__(self):
        super()
        self.name = "Dragonborn"
        self.racial_str_bonus = +2
        self.racial_char_bonus = +1


def get_racial_bonus(race):
    race = race
    racial_str_bonus = 0
    racial_char_bonus = 0
    if race == "Dragonborn":
        racial_str_bonus = Dragonborn.racial_str_bonus
        racial_char_bonus = Dragonborn.racial_char_bonus
    return racial_str_bonus, racial_char_bonus


class BaseCharacter:
    def __init__(self, racial_str_bonus, racial_char_bonus):
        self.racial_str_bonus = racial_str_bonus
        self.racial_char_bonus = racial_char_bonus

    @classmethod
    def generate_player_character(cls):
        cls.race = input("Race: ")
        get_racial_bonus(cls.race)


BaseCharacter.generate_player_character()

我正在寻找的是沿线的东西:

'''
Race: Dragonborn
print(my_player_char.racial_str_bonus)
2
'''

我在哪里胡闹?

标签: pythonpython-3.x

解决方案


谢谢大家的反馈。在清理代码以使其具有最低限度的可重复性时,我发现了问题所在。根据 Jonrsharpe 的说明,我将继承调用更正为 'super()。初始化(自我)'。一旦正确,我意识到它们的定义方式,我必须在属性调用中包含括号:“Dragonborn().racial_str_bonus”。

再次感谢,我会记得在未来改进我的提交。


推荐阅读