Python - 无法从列表或随机实例创建实例

时间:2014-04-24 23:19:27

标签: python python-3.x

我正在制作一个小文本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天(开启和关闭)的大部分时间试图找到最底层,但找不到有效的解决方案。

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。