2017-09-14 15 views
0
class StockValues: 
    def __init__ (self, DD, MM, YYYY, averageValue): 
     self.date = map (str, [DD, MM, YYYY]) 
     self.averageValue = averageValue 

class Stock: 
    stockValues = [] 

    def __init__ (self, name, code, currency): 
     self.name = name 
     self.code = code 
     self.currency = currency 

Stocks = [] 
for index, stock in enumerate(StocksBufferToMemory): 
    #print ("{0:.0f}%".format(float(index)/len(StocksBufferToMemory) * 100)) 
    stockTemp = Stock (stock.name, stock.code, stock.currency) 
    stockTempValues = StockValues (stock.date[0], stock.date[1], stock.date[2], stock.averageValue) 
    stockTemp.stockValues.append (stockTempValues) 
    Stocks.append (stockTemp) 
    print (stockTempValues) 

このコードは、stockTempごとに1つのデータだけでなく、stockTemp.stockValuesに多くのデータを作成しています。同じメモリアドレスを維持するPythonのローカル変数

助けてください、事前に

EDIT1感謝:ソフトウェアを説明する:イムは、特定の年の間、株価のフル.txtファイルを取っては、各株式は一日一本の価格を持っているので、ideiaは作成することです。株式のリストと各在庫は日に応じて価格のリストを持って、私の問題は、テストするために値の1日だけを使用していると各株式は値の倍数エントリで終わったです。私はmemのアドレスを印刷して問題を引き起こしている変数を見つけることができました。それはforループであり、反復するたびにmemmoryアドレスを変更し、stockTemp.stockValuesが変化しないようにする必要があります。

+0

'stockTemp.stockValues'がリストであるので、メモリ内のアドレスは、最初の要素(広義)のアドレスのみです...あなた以来、それに追加のアドレスを保ちます頭は変わらない。 –

+1

どのようにメモリアドレスを決定していますか、なぜ気にしていますか? Pythonのような高水準言語のポイントは、そのような低レベルの詳細で悩む必要はないということです。 – jwodder

+0

これは[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)と非常によく似ています。 Pythonのメモリアドレス(メモリ管理を担当する言語)を見れば、コードに何が間違っているのかが分かると思いますか? – jwodder

答えて

0

ありがとう@ @jasonharper問題は、私のstockValues変数がインスタンス属性の代わりにクラス属性(すべてのクラスインスタンスの同じ値)であることです。 コードは固定:

class Stock: 

def __init__ (self, name, code, currency): 
    self.name = name 
    self.code = code 
    self.currency = currency 
    self.stockValues = [] 
関連する問題