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

2024-10-01 02:29:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个小文本RPG来帮助我学习Python语言,并且我试图从一系列名称中创建一个类的多个实例。在

我有一类敌人(命名为:敌人),想在一个时间创造1到3个“地精”敌人。在

class Enemy:
    def __init__(self, health):
        self.health = health

到目前为止,我解决这个问题的方法是使用for循环遍历字母“a”、“b”和“c”,并附加一个敌人列表。在

^{pr2}$

这给了我三个小妖精的名单:

['goblina', 'goblinb', 'goblinc']

以“新加入的哥布林的名字”为例:“每一个哥布林都想创建一个新的敌人名单…”goblinb=敌人(10个)

但是,当我尝试使用多种方法创建实例时,包括以下方法(这可能是绝对错误的方法):

for i in range (1, 3):
    enemylist[i] = enemy(10)

我得到的只是一个名为enemylist[i]的实例。在

有人能帮帮我吗。就像我说的,我对这门语言还不熟悉,所以请对我的解释温和一点,但我学习速度很快,愿意阅读和研究。在

我花了2天的大部分时间(断断续续地)试图弄清真相,却找不到有效的解决办法。在


Tags: 实例方法文本self名称语言for时间
2条回答

也许将敌人的名字保留为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))

在不知道如何利用敌人的情况下,很难提出建议。如果你想通过名字来查找敌人,字典是一种更好的存储敌人的数据结构:

^{pr2}$

我认为在类中添加一个名称是很好的,但是创建一个具有相同名称的键的dict,同时将名称和运行状况存储为dict值似乎有点多余(如上面的答案所示)。在

class Enemy:
    def __init__(self, name, health):
        self.name = name
        self.health = health
    def __repr__(self):
        return self.name

这将为您提供一个名称进行访问。您仍然可以将敌方类的每个实例存储在一个列表中,如果愿意,可以使用列表理解(或任何其他列表创建):

^{pr2}$

现在您有一个列表敌人,由三个实例化的敌人类对象组成,它们有一个可以访问的名称。例如

goblina.__name__ 

会回来戈布丽娜和

isintance(goblina, Enemy) 

将返回True。在

相关问题 更多 >