如何使用list的元素作为类的对象?

时间:2017-11-22 15:53:26

标签: python

所以我有这个课程

class Character(object):
    def __init__(self):
        self.NAME = ''
        self.life = 50

我也有这个清单

 players = ["red","green","blue","yellow"]

我试图让每个"播放器"成为一个角色,这就是我做的事情

for player in players:
    player = Character()

现在我去了

print(red.life)    #or if i try
print("red".life)    #why doesn't it work?
# for some reason it uses player as object for the
# class but I want the element of the list to be used!     

4 个答案:

答案 0 :(得分:3)

将玩家置于一个词典中会起作用:

set

但是,打印只有在为您的班级创建import numpy as np from pyqtgraph.Qt import QtGui, QtCore import pyqtgraph as pg app = QtGui.QApplication([]) x=[0,1,2,3,4,5,3.5,3.4, 3.4] y=[5,4,3,2,1,0,3.4,3.5, 3.5] win=pg.GraphicsWindow() p1=win.addPlot(row=1, col=1) my_data=pg.ScatterPlotItem(x,y,symbol='o',size=30) p1.addItem(my_data) def clicked(item, points): indexes = [] for p in points: p = p.pos() x, y = p.x(), p.y() lx = np.argwhere(item.data['x'] == x) ly = np.argwhere(item.data['y'] == y) i = np.intersect1d(lx, ly).tolist() indexes += i indexes = list(set(indexes)) print(indexes) my_data.sigClicked.connect(clicked) if __name__ == '__main__': import sys if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): QtGui.QApplication.instance().exec_() 方法时才有效。

答案 1 :(得分:1)

您有一个字符串列表,eltype(iter)正在尝试调用成员变量f,这些字符串对象不包含这些变量。而是创建单独的类实例:

"red".life

然后,您可以致电life

class Character(object):
   def __init__(self):
      self.NAME = ''
      self.life = 50

red = Character()
green = Character()
...

答案 2 :(得分:1)

此:

for player in players:
    player = Character()

将为Character中的每个项目创建一个新的players实例(不使用项目本身),并将其分配给player变量(每次都覆盖前一个分配)。这当然不会改变您的players列表中的任何内容。循环终止后,您将获得绑定到Character()变量的单个player实例,并且全部。 IOW,您将获得相同的实际结果,用一个替换循环:

player = Character()

但它显然没有任何用处。

  

print(red.life)

您在哪里定义了名为red的变量?

  

或者如果我尝试   打印("红色" .life)

"red"是一个字符串。字符串没有属性life

  

出于某种原因,它使用播放器作为对象   class但我希望使用列表的元素!

列表的"元素" (我假设你的意思是players列表)也是字符串。如果您想获得Character实例的列表,您可以获得以下内容:

class Character(object):
    def __init__(self, name):
        self.name = name
        self.life = 50

playernames = ["red", "green", "blue", "42"]
players = [Character(name) for name in playernames]

但仍然不会创建任何名为redgreen等的变量,只会创建一个Character实例列表。

如果您希望能够检索特定的Character实例,则需要显式创建变量或使用dict。创建变量:

red = Character("red")
yellow = Character("yellow")
# etc

但这意味着你的所有角色都是硬编码的 - 你不能拥有更多或更少的玩家,也不能用不同的名字等等。

使用词典:

playernames = ["red", "green", "blue", "42"]
players = {name:Character(name) for name in playernames}

print(players["red"].life)
print(players["green"].life)
# etc

答案 3 :(得分:0)

谢谢大家,我试着了解你的所有答案,并让它发挥作用,这是我想要制作的游戏,这是我第一次做一些如此复杂的事情,我的编码是一团糟,它具有0可读性。目前我只制作了这个角色创作者和世界地图创作者,地图是由我将给出的各种瓷砖(如商店,河流,丛林)制成的,每个名称都有特殊属性。我已经让角色产生和移动成为可能,我现在将制作一些能够确定角色是什么类型的瓷砖的东西,遗憾的是我很难弄清楚如何给每个瓷砖提供不同的坐标。 我非常感激。