2016-05-07 1 views
1

私はオブジェクトの100インスタンスを生成しようとしていますが、それぞれに番号付きIDメンバーがあります。これを実行すると、cell1、cell2、cell3などのcell_IDsを持つCellクラスのインスタンスが100個生成されることが予想されていましたが、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

を、あなたも本当にオブジェクトを呼び出している「ことを実行しません」 .attr'とそれは単に動作しません。 – Roberto

答えて

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)] 
+0

問題は、それぞれのインスタンスに対して一意のcell_IDを生成したいということです。別の機能でこれを行うほうが簡単でしょうか?ちなみに助けてくれてありがとう、本当に感謝しています。 – Razinmore

+0

@Razinmore - 編集でわかるように、 'list'を使うと非常に簡単になります。 :) – TigerhawkT3

+0

おかげで、それは愚かな質問だった場合はごめんなさい:) – Razinmore

0

同じCellオブジェクトを再利用しています。代わりに毎回新しいものを作成してください。

そのため、代わりに行うので:

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

ではなく、これを実行します。

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

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

もう一つの提案は、Cellオブジェクトは、それが所有していますインクリメントIDを取得することです

次に、cすべてあなたが望むよう多くの、そして、彼らはすべての新しいIDがあります: `OBJ():@ TigerhawkT3により良いアドバイスのほか

l = [Cell(0, 0) for _ in range(100)] 
関連する問題