如何从Enum类和列表中调用值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从Enum类和列表中调用值相关的知识,希望对你有一定的参考价值。

在我正在开发的程序中,我想创建可以攻击玩家的敌人。虽然我可以结交敌人,但我在调用他们的统计信息时遇到了麻烦,我将需要这样做才能以自己想要的方式创建他们的方法。

class EnemyLevel(Enum):
    easy = 4, 15, 1
    medium = 6, 20, 1.5
    hard = 8, 25, 2
    def __init__(self, damage, health, hps):
        self.damage = damage
        self.health = health
        self.hps = hps

class Enemy:
    def __init__(self):
        self.stats = random.choices(list(EnemyLevel), enemyWeight)
    def attack(self, target):
        target.stats.health = target.stats.health - self.stats.damage 
enemyWeight = EnemyWeights[int(input("0 for easy, 1 for medium, 2 for hard
"))]
enemies = [Enemy() for x in range(int(input("How many enemies?
")))]

这就是我创造敌人的方式。但是,在调用他们的统计信息时,出现了此错误。我意识到这与我创建它们的方式有关,但是我不确定我的错误在哪里。我希望能够说出敌人[0] .stats.damage之类的内容,它会返回伤害值

0 for easy, 1 for medium, 2 for hard
2
How many enemies?
2
EnemyLevel.hard
EnemyLevel.hard
>>> enemies[0].stats
[<EnemyLevel.hard: (8, 25, 2)>]
>>> enemies[0].stats.damage
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    enemies[0].stats.damage
AttributeError: 'list' object has no attribute 'damage'

编辑:我认为这与我对self.stats = random.choices(list(EnemyLevel), enemyWeight)的使用有关,但我不知道如何通过EnemyLevel向我的敌人提供其统计数据

答案

我发现我可以通过在调用选择项后为列表建立索引以拉出第一项来解决此问题。 self.stats = random.choices(...)[0]完美地解决了该问题。

以上是关于如何从Enum类和列表中调用值的主要内容,如果未能解决你的问题,请参考以下文章

如何将列表视图中的数据从一个片段发送到另一个片段

OnItemClick 如何从列表视图中获取单击项目的文本值

从活动中调用片段事件

如何将值从其他活动传递给 viewpager 片段?

JAVA方法的定义

Android:如何在选项卡内从一个片段导航到另一个片段? [关闭]