2017-07-21 12 views
0

私は株式アカウントの損益を追跡するプログラムを設計する予定ですが、Pythonを使用してオブジェクト指向の方法で解決することを願っています。Python PNL OOP、別のクラスの属性を使用する方法

コード:

class PNL(object): 
    stock_amount = {} 
    def __init__(self,cash,position): 
     self.cash = cash 
     self.position = position 

    def buy(self,Stock,amount): 
     pass 
    def sell(self,Stock,amount): 
     pass 
    def stock_amt(self,Stock): 
     if Stock().symbol not in stock_amount: 
      stock_amount[Stock().symbol] = 0 
     else: 
      return stock_amount 


class Stock(): 
    def __init__(self,symbol,timestamp,price): 
     self.symbol = symbol 
     self.time = timestamp 
     self.price = price 

a = PNL(0,0) 
APPL = [] 
APPL.append(Stock('APPL',0,10)) 
APPL.append(Stock('APPL',1,12)) 
a.stock_amt('APPL') 
for stock in APPL: 
    if stock.time == 0: 
     print stock.price 

しかし、これは正常に動作しない、誰もがその上でアイデアを持って?

答えて

0

は、まずあなたは、引数/パラメータとして、あなたはより良い別の名前を選択したい、またはクラスStockとの違いを確認するために小文字でそれを書く、Stockでメソッドを宣言するときに、クラスPNLを修正する必要があります。

あなたはこれらのメソッドにインスタンスを与え、型を書く必要はないと思っています。そして、Stock().symbolを実行してメソッド内のクラスを再度インスタンス化する必要はありません。あなたが好きな場合は属性シンボル。ちょうどあなたがあなたのクラスを呼び出すとき

class PNL(object): 

    def __init__(self,cash,position): 
     self.cash = cash 
     self.position = position 
     self.stock_amount = {} 

    def buy(self,stock,amount): 
     pass 
    def sell(self,stock,amount): 
     pass 
    def stock_amt(self,stock): 
     if stock.symbol not in self.stock_amount: 
      self.stock_amount[stock.symbol] = 0 
     else: 
      return self.stock_amount 

その後、私は(あなたが構築したリストAPPLにループしたかったと思う:また、stock_amountは以下のように、インスタンスの属性として保存することができ

a.stock_amt(stock_object_created)呼び出す:

a = PNL(0,0) 
APPL = [] 
APPL.append(Stock('APPL1',0,10)) 
APPL.append(Stock('APPL2',1,12)) 

for stock in APPL: 
    a.stock_amt(stock) 
    if stock.time == 0: 
     print stock.price 
print a.stock_amount 

#>>>10 
#>>>{'APPL2': 0, 'APPL1': 0} 
+0

こんにちはPRMoureu、まず、私は本当にあなたのタイピングと助けに感謝この質問については、PNL.stock_amtはので、私は現在の合計を得ることができるだろう、私のポートフォリオ内の各在庫量を格納するために使用される属性です。 "現金"の価値。だから私はカルする必要がありますl他のClassの属性をハッシュマップとして保持します。株式( 'APPL'、0,10)では、0はタイムスタンプが価格変動を記録することを意味するので、それをどのように実装するか考えていますか? –

+0

@SidiChang 'self.stock_amount [stock.symbol] = 0'で使われているのと同じ構文でこの在庫金額を保存することができます(stock.priceで0を置き換えます)。そして、クラスPNLに別のメソッドを実装します。 'self.stock_amount.values()'のループを持つ各在庫量 – PRMoureu

+0

こんにちは、しかし株価は動的に変更され、時系列に基づいています、それ以上のヒントは高く評価されるでしょう! –

関連する問題