如何从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类和列表中调用值的主要内容,如果未能解决你的问题,请参考以下文章