为了账号安全,请及时绑定邮箱和手机立即绑定

Python:基于变量的名称实例

Python:基于变量的名称实例

守着一只汪 2021-03-09 13:13:52
我对Python和一般编程还是很陌生。我正在将基于终端的游戏作为练习项目。游戏将包含一系列房间和怪物。我的计划是制作这些类的怪物和房间实例。我将在整个游戏中创建其中的一些,其中许多是根据玩家的动作即时创建的。当创建新的怪物和房间时,我目前坚持事先知道它们的名字。像这样:class Monster(object):    passMonster1 = Monster(something)在运行前必须知道实例名称似乎是一个笨拙的解决方案。我当时以为,有一个变量来跟踪怪物的数量,然后动态创建实例名称会更容易。这样创建的第一个怪物实例将自动成为Monster1,下一个实例将成为Monster2,依此类推。像这样的东西:class Monster(object):    passmonster_id = 0def 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()因此,问题是:如何在运行时不知道实例名称的情况下创建类的实例?我还想知道我是否很难让它正常工作,因为我做的事情很愚蠢,而这是一种更聪明/更优雅的方法。在任何情况下,所有帮助和投入都将不胜感激。
查看完整描述

3 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

这是新手的常见问题,对了,这是一种“更聪明/更优雅的方式”。您使用像字典这样的数据结构来保存您的实例:


monsters = {}

monsters['Monster1'] = Monster()

monsters['Monster2'] = Monster()

因为字典的键是字符串,所以在运行时定义它们没有问题,但是您喜欢:


monster_name = "Monster" + str(monster_id)

monster_id += 1   

monsters[monster_name] = Monster()


查看完整回答
反对 回复 2021-03-24
?
莫回无

TA贡献1865条经验 获得超7个赞

您有三种选择:

  1. 用途evaleval(monster_instance + ' = Monster()')。eval基本执行一个字符串。请注意,正如RichieHindle在评论中所说,这eval不是理想的解决方案。它可能是一个选项,但这并不意味着建议您这样做。

  2. 使用数组/列表:monsters.append(Monster())。使用初始化它monsters = []

  3. 使用字典:monsters[monster_instance: Monster()]monsters.update({monster_instance: Monster()})。使用初始化它monsters = dict()


查看完整回答
反对 回复 2021-03-24
  • 3 回答
  • 0 关注
  • 196 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号