2017-03-13 10 views
0

私は株式データを取得するためのPythonモジュールの作成に取り組んでいます。Pythonのdictに基づく動的メソッド

class Stock(object): 

    def getSymbol(): 
     return self.data['StockSymbol'] 

    def getLastTradeTime(): 
     return self.data['LastTradeTime'] 

    ........ 

私のようにそれを使用する:現在、私のような11個のメソッドを持っている

{'StockSymbol': 'AMD', 'LastTradeTime': '4:00PM EST', 'ChangePercent': '+0.58', 'ID': '327', 'LastTradeDateTimeLong': 'Mar 10, 4:00PM EST', 'Index': 'NASDAQ', 'LastTradeWithCurrency': '13.91', 'LastTradeDateTime': '2017-03-10T16:00:02Z', 'LastTradePrice': '13.91', 'LastTradeSize': '0', 'PreviousClosePrice': '13.33'} 

google = Stock('GOOG') 
print(google.getLastTradeTime()) //4:00PM EST 

私の質問は、それが可能です

私は辞書を持っていますこれらのメソッドを動的に生成するには?

google.getLastTradeSize()などは定義できません。ここで

はPythonのフィドルです:Pythonでhttps://repl.it/GSG1

+1

辞書検索のラッパーだけであるメソッドがあるのがわかりません。 – TigerhawkT3

+0

__getattribute__メソッドを記述して呼び出し可能な関数を返すことができますか? – lctr30

+0

@ TigerhawkT3は、値を一括編集することです(たとえば、すべてのunix時間を変換し、数を千と数百万に変更するなど)。 – WhatisSober

答えて

3

束と呼ばれるデザインパターンがあります、それはこのように動作します、私はそれはあなたの問題を解決できると信じて:

class Bunch(dict): 
    def __init__(self, *args, **kwargs): 
     super(Bunch, self).__init__(*args, **kwargs) 
     self.__dict__ = self 


    def __getattribute__(self, item): 
     try: 
      return object.__getattribute__(self, item) 
     except: 
      return None 

my_dict = {'StockSymbol': 'AMD', 'LastTradeTime': '4:00PM EST', 'ChangePercent': '+0.58', 'ID': '327', 
      'LastTradeDateTimeLong': 'Mar 10, 4:00PM EST', 'Index': 'NASDAQ', 'LastTradeWithCurrency': '13.91', 
      'LastTradeDateTime': '2017-03-10T16:00:02Z', 'LastTradePrice': '13.91', 'LastTradeSize': '0', 
      'PreviousClosePrice': '13.33'} 

obj = Bunch(**my_dict) 
print obj.StockSymbol 
print obj.LastTradeTime 
print obj.key_not_exist 

そして、我々が得る:

AMD 

4:00PM EST 

None 

Java/C++のように、いわゆるgettterメソッドを定義する必要はありません。

PS:実際のプロジェクトでは、このBunchクラスから継承することもできます。

+0

すばらしい。キーが見つからない場合はnull([])を返すことは可能ですか? – WhatisSober

+1

@WhatisSober、ええ、それは可能です、私は既にコードに関連する方法を追加しました。これがあなたが望むものなら、私はそれを感謝します。 –

関連する問題