您可以使用函数生成具有唯一成员的类的实例吗?

时间:2016-05-07 00:10:08

标签: python

我试图生成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")

2 个答案:

答案 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"