所以我有这个课程
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!
答案 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]
但仍然不会创建任何名为red
,green
等的变量,只会创建一个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可读性。目前我只制作了这个角色创作者和世界地图创作者,地图是由我将给出的各种瓷砖(如商店,河流,丛林)制成的,每个名称都有特殊属性。我已经让角色产生和移动成为可能,我现在将制作一些能够确定角色是什么类型的瓷砖的东西,遗憾的是我很难弄清楚如何给每个瓷砖提供不同的坐标。 我非常感激。