我正在制作一个小文本RPG来帮助我学习Python语言,我正在尝试从名单列表中创建一个类的多个实例。
我有一类敌人(命名为:敌人),并希望在1到3岁之间创造一个小妖精"时间上的敌人。
class Enemy:
def __init__(self, health):
self.health = health
到目前为止,我如何解决问题的方法是使用for循环来运行字母' a'' b'和' c'并附上一份敌人名单。
for i in ['a', 'b', 'c']:
enemylist.append('goblin' + (i))
这给了我一个三个哥布林的清单:
['goblina', 'goblinb', 'goblinc']
现在我想采取每一个新附加的"地精"在列表中并使用该地精的名称创建敌人类的实例(例如:" goblina = enemy(10)" ..." goblinb = enemy(10)。 ..)
但是当我尝试使用包括以下内容在内的任何方式创建实例时(这可能是绝对错误的方法):
for i in range (1, 3):
enemylist[i] = enemy(10)
我得到的只是一个名为enemylist[i]
的实例。
有人可以帮助我。就像我说的那样,我是语言的新手,所以请温柔地解释,但我是一个快速学习者,愿意阅读和研究。
我花了2天(开启和关闭)的大部分时间试图找到最底层,但找不到有效的解决方案。
答案 0 :(得分:1)
将敌人的名字保持为Enemy
类的成员也许更有意义:
import random
class Enemy:
def __init__(self, name, health):
self.name = name
self.health = health
def create_enemies():
enemies = []
for i in ['a', 'b', 'c']:
name = 'goblin'+i
health = random.randint(10,20)
enemies.append(Enemy(name, health))
如果不知道你是如何使用敌人的话,很难提出建议。如果你希望能够通过名字查看敌人,那么字典将是一个更好的数据结构来存储它们:
def create_enemies():
enemies = {} # Initialize empty dict
for i in ['a', 'b', 'c']:
name = 'goblin'+i
health = random.randint(10,20)
enemies[name] = Enemy(name, health)
return enemies
def main()
enemies = create_enemies()
ga = enemies['goblina']
答案 1 :(得分:0)
我认为在类中添加名称是好的,但创建一个带有等同名的密钥的dict,但也将名称和健康存储为dict值似乎有点多余(如上面的答案所示)。
class Enemy:
def __init__(self, name, health):
self.name = name
self.health = health
def __repr__(self):
return self.name
这将为您提供名称以便访问。如果您愿意(或任何其他列表创建),您仍然可以使用列表解析将每个敌人类实例存储在列表中:
for i in enemylist:
i = Enemy(i, 10)
enemies.append(i)
现在你有一个列表敌人,包括Enemy类的三个实例化对象,它们具有可以访问的名称。例如
goblina.__name__
将返回goblina和
isintance(goblina, Enemy)
将返回True。