2016-05-07 5 views
1

Ich versuche, 100 Instanzen eines Objekts zu generieren, jede mit einem nummerierten ID-Mitglied. Wenn ich dies ausführte, erwartete ich, dass es 100 Instanzen der Cell-Klasse mit cell_IDs wie cell1, cell2, cell3 usw. erzeugt. Allerdings erhalte ich einen Attributfehler, der mir sagt, dass die Cell-Instanz keine -Methode hat. Ich weiß nicht wirklich, ob das, was ich tun möchte, möglich ist, und ich kann online nichts zu diesem Thema finden. Danke, dass Sie sich die Zeit genommen haben, dies zu lesen, ich schätze es sehr.Können Sie Instanzen einer Klasse mit eindeutigen Membern mithilfe einer Funktion generieren?

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

Neben dem guten Rat von @ TigerhawkT3 „tun das nicht“, bist du auch wirklich das Objekt aufrufen: 'obj() .attr 'und das funktioniert einfach nicht. – Roberto

Antwort

1

Sie nicht das tun. Verwenden Sie eine Datenstruktur wie z. B. 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)] 
+0

Die Sache ist, ich möchte eine eindeutige cell_ID für jede Instanz generieren. Wäre es einfacher, dies in einer separaten Funktion zu tun? Danke für die Hilfe übrigens, ich schätze es sehr. – Razinmore

+0

@Razinmore - Wie Sie in der Bearbeitung sehen können, macht die Verwendung einer 'Liste' das sehr einfach. :) – TigerhawkT3

+0

Danke, es tut mir leid, wenn das eine dumme Frage war :) – Razinmore

0

Sie verwenden dasselbe Zellobjekt erneut. Erstellen Sie stattdessen jedes Mal ein neues.

Daher anstatt das zu tun:

obj().attr = attr + str(x) 
self.cell_list.append(obj) 

diese stattdessen tun:

self.cell_list.append(Cell(0, 0, attr + str(x)) 

Ein weiterer Vorschlag der Cell-Objekt zu machen ist, erhalten seine eigene erhöht ID:

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,) 

Dann können Sie c alle so viele, wie Sie wollen, und sie werden alle haben eine neue ID:

l = [Cell(0, 0) for _ in range(100)] 
Verwandte Themen