Python:基于变量的名称实例

我对Python和一般编程还是很陌生。


我正在将基于终端的游戏作为练习项目。游戏将包含一系列房间和怪物。我的计划是制作这些类的怪物和房间实例。我将在整个游戏中创建其中的一些,其中许多是根据玩家的动作即时创建的。


当创建新的怪物和房间时,我目前坚持事先知道它们的名字。像这样:


class Monster(object):

    pass


Monster1 = Monster(something)

在运行前必须知道实例名称似乎是一个笨拙的解决方案。我当时以为,有一个变量来跟踪怪物的数量,然后动态创建实例名称会更容易。这样创建的第一个怪物实例将自动成为Monster1,下一个实例将成为Monster2,依此类推。


像这样的东西:


class Monster(object):

    pass


monster_id = 0


def createMonster(monster_id)

monster_instance = "Monster" + str(monster_id)

monster_id += 1   

# The following is where i'm stuck. Basically I want to have the instance name be equal to   the content of monster_instance

(monster_instance) = Monster()

因此,问题是:如何在运行时不知道实例名称的情况下创建类的实例?


我还想知道我是否很难让它正常工作,因为我做的事情很愚蠢,而这是一种更聪明/更优雅的方法。在任何情况下,所有帮助和投入都将不胜感激。


守着一只汪
浏览 197回答 3
3回答

慕标琳琳

这是新手的常见问题,对了,这是一种“更聪明/更优雅的方式”。您使用像字典这样的数据结构来保存您的实例:monsters = {}monsters['Monster1'] = Monster()monsters['Monster2'] = Monster()因为字典的键是字符串,所以在运行时定义它们没有问题,但是您喜欢:monster_name = "Monster" + str(monster_id)monster_id += 1   monsters[monster_name] = Monster()

莫回无

您有三种选择:用途eval:eval(monster_instance + ' = Monster()')。eval基本执行一个字符串。请注意,正如RichieHindle在评论中所说,这eval不是理想的解决方案。它可能是一个选项,但这并不意味着建议您这样做。使用数组/列表:monsters.append(Monster())。使用初始化它monsters = []。使用字典:monsters[monster_instance: Monster()]或monsters.update({monster_instance: Monster()})。使用初始化它monsters = dict()。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python