2017-08-10 5 views
2

私は単純なデータを格納する単純なクラスを持っています。クラスは以下の通りです。クラスオブジェクトの動的インスタンスが互いに上書きされます

class DataFormater: 

    def __init__(self, N, P, K, price): 

     self.N = N 
     self.P = P 
     self.K = K 
     self.price = price 

このクラスを呼び出すコード

from DataFormater import DataFormater 

#global variables 
ObjectList = [0,1,2,3,4,5,6,7,8,9,10, 
       11,12,13,14,15,16,17,18,19,20, 
       21,22,23,24,25,26,27,28,29,30, 
       31,32,33,34,35,36,37,38,39,40, 
       41,42,43,44,45,46,47,48,49,50] 
ObjectListCounter = 0 

# main 
print "enter you N-P-K values, followed by a coma, then the price" 
print "example ----> 5 5 5 %50 " 
print "return as many values as you want to sort, then enter, 'done!' when done." 

while True: 
    RawData = raw_input() 
    if RawData == 'done!': 
     break 

    else: 

     ObjectList[ObjectListCounter] = DataFormater 
     ObjectList[ObjectListCounter].N = int(RawData[0]) 
     # very simple test way of putting first indice in ObjectList[ObjectListCounter].N 
     ObjectListCounter += 1 

print ObjectList[0].N 
print ObjectList[1].N 

私の考えはObjectList[0]は、そのオブジェクトを作成するということである「1」私はこれらを呼び出すときに、私は、1.N

と呼んしかし、できること、以前のインスタンスを上書きしたようです。

これは印刷し何で...

return as many values as you want to sort, then enter, 'done!' when done. 
12 
1 
done! 
1 
1 

本当にありがとうございました!私の投稿が面倒だと分かっていますが、私はそれをもっと「きれいに」する方法を正確にはわかりません。

答えて

3

したがって、あなたのループに実際のクラス(クラスのインスタンスではなく)を割り当てているようです。私はあなたが実際に何をしたいと思います

ObjectList[ObjectListCounter] = DataFormater 

コメントに対処するため、この

ObjectList[ObjectListCounter] = DataFormater(...insert args here....) 

EDITです:

あなたのクラスのinitメソッドは次のようになります。

def __init__(self, N, P, K, price): 
あなたはこれをどこにやります

つまり、クラスのインスタンスを作成するには、次のようになります。

my_formater = DataFormater(1, 2, 3, 4) 

その後、1の価値を持っているでしょうmy_formater.Nにアクセスすることができるだろう。

代わりにしようとしているのは、CLASSレベルの属性DataFormater.Nにアクセスすることです。これは一般に、クラスのインスタンス間で変更されない定数変数がある状況で使用されます。たとえば:

DataFormater.CONSTANT_THING 

私は物事をクリア願っています:

class DataFormater(): 

    CONSTANT_THING = 'my thing that is always the same for every instance' 

あなたは、このように、クラスから直接その変数にアクセスすることができるだろう。

+0

ObjectList [ObjectListCounter] = DataFormater.N AttributeError:class DataFormaterには属性がありません。 'N''は私に唾を吐くのですか?ここにアイデアはありますか? – Nova

+0

ありがとうございます。それは有り難いです! – Nova

+0

心配する必要はありません。うれしく思います! – MrName