我试图生成100个对象实例,每个实例都带有编号ID成员。当我运行它时,我期望它生成100个Cell类的实例,其中包含cell_ID,例如cell1,cell2,cell3等。但是,我得到一个属性错误,告诉我Cell实例没有调用方法。我真的不知道我想做什么是可能的,而且我无法在网上找到关于这个主题的任何内容。感谢您花时间阅读本文,我真的很感激。
import string
class Cell():
def __init__(self, x, y, cell_ID):
self.x = x
self.y = y
self.cell_ID = cell_ID
def __str__(self):
return "%s:(%i,%i)" % (self.cell_ID, self.x, self.y,)
class Event(Cell):
def __init__(self):
print "EVENT TEST"
self.cell_list = []
def makeCells(self, obj, attr):
for x in range(0,100):
obj().attr = attr + str(x)
self.cell_list.append(obj)
e = Event()
e.makeCells(Cell(0,0, ""), "cell")
答案 0 :(得分:1)
不这样做。使用数据结构,例如list
。
import string
class Cell():
def __init__(self, x, y, cell_ID):
self.x = x
self.y = y
self.cell_ID = cell_ID
def __str__(self):
return "%s:(%i,%i)" % (self.cell_ID, self.x, self.y,)
l = [Cell(0, 0, id) for id in range(100)]
答案 1 :(得分:0)
您正在重复使用相同的Cell对象。每次都要创建一个新的。
因此,而不是:
self.cell_list.append(Cell(0, 0, attr + str(x))
请改为:
class Cell(object):
cell_ID = 0
def __init__(self, x, y):
Cell.cell_ID += 1
self.cell_ID = 'cell{}'.format(Cell.cell_ID)
self.x = x
self.y = y
def __str__(self):
return "%s:(%i,%i)" % (self.cell_ID, self.x, self.y,)
另一个建议是让Cell对象获得它自己增加的ID:
l = [Cell(0, 0) for _ in range(100)]
然后你可以根据需要打电话,他们都会有一个新的ID:
let timCook = Entity(type: "Employees")
timCook["name"] = "Tim Cook"
timCook["company"] = "Apple"