Python,将变量的名称添加到列表/字典中

时间:2016-03-26 09:25:46

标签: python list

我是POO的初学者。

我实际上是用pygame编写游戏编码,我想将变量的名称添加到列表或词典中。

我有一个类 init

class Hero:
    def __init__(self, posx, posy, image) :
        self.name = "Hero"

        self.posx = posx
        self.posy = posy

        self.image = pygame.image.load(image).convert_alpha()

        self.width = self.image.get_rect()[2]
        self.height = self.image.get_rect()[3]

我有一个在屏幕上显示精灵的功能:

def show(self) :
    display.blit(self.image, (self.posx, self.posy))

它有效,没有问题,我实际上正在使用它:

captainamerica = Hero(100,400, "sprites/captainamerica/base.png")
captainamerica.show()
ironman = Hero(100,400, "sprites/ironman/base.png")
ironman.show()

但我想用这个:

listhero = []
listhero.append(captainamerica)
listhero.append(ironman)
i = 0
while i < len(listhero):
    listhero[i].show()

它不起作用,因为它采用变量的值而不是变量的名称。

感谢您的帮助,如果我的英语不好,请抱歉。

3 个答案:

答案 0 :(得分:1)

你没有递增i,所以这导致无限循环。

你可以添加

i += 1

在循环结束时。

更好的是,这样做:

for h in listhero:
    h.show()

关于您选择的数据结构,正如评论中所强调的那样,使用字典比使用列表更好。你可以这样做:

heroes = {}
heroes['Captain America'] = Hero(100, 400, 'sprites/captainamerica/base.png')

答案 1 :(得分:1)

你可以使用字典:

dictheroes = {}

dictheroes['ironman'] = Hero(100,400, "sprites/ironman/base.png")

答案 2 :(得分:1)

保持列表,你也可以

[h.show() for h in listhero]

你可以使用字典,但是blit的顺序不是dict中insert的顺序。如果您需要保留blit的顺序,请继续列表或使用:

collections.OrderedDict