2016-11-26 38 views
0

同じクラスの他の関数(self .__ sma)の変数を使用する関数(get_score)があります。Pythonの他の関数から変数にアクセスする方法

私の質問:どのように私はget_score関数からこれらの変数にアクセスすることができますか? (エラー:グローバル名は定義されていません)。

また、私はグローバル変数を使用して(私はここに読んだものからベース)shitstormを引き起こすことを聞きました。前もって感謝します。スクリプトのコピーと

testlist = ['TREE', 'HAPPY'] 
Class MyStrategy(strategy.BacktestingStrategy): 
    def __init__(self, feed, instrument): 
     super(MyStrategy, self).__init__(feed, 1000) 
     self.__position = [] #None 
     self.__instrument = instrument 
     self.setUseAdjustedValues(True) 
     self.__prices = feed[instrument].getPriceDataSeries() 
     self.__sma = ma.SMA(feed[instrument].getPriceDataSeries(), smaPeriod) 

    def get_score(self,banana) 
     fruit_lover= self.__sma 
     return fruit_lover + banana 

    def onBars(self, bars): 
     for x in bars.getInstruments(): 

      list_large = {} 
      for y in testlist: 
       list_large.update({y : self.get_score(5)}) 
+1

、検索 – Eric

+0

を尋ねる前に私は、私は実際にこれで苦労して、午前でした...リンクは素晴らしいことだ...いくつかのページが、そのまだありませんを発見しましたワーキング。 – RageAgainstheMachine

+0

'get_score'と呼ばれる関数はスコアを取得/返すべきであり、いくつかの変数を設定しません。 '{y:self.get_score(5)}'は 'y'を' None'に設定しています。 –

答えて

1

、およびスタブの束、そしてあまりにも多くの構文の訂正:私は次の実行を得る

testlist = ['TREE', 'HAPPY'] 
class MyStrategy(): #strategy.BacktestingStrategy): # lowercase class 
    def __init__(self, feed, instrument): 
     #super(MyStrategy, self).__init__(feed, 1000) 
     self.__position = [] #None 
     self.__instrument = instrument 
     #self.setUseAdjustedValues(True) 
     self.__prices = 123 #feed[instrument].getPriceDataSeries() 
     self.__sma = 100 # ma.SMA(feed[instrument].getPriceDataSeries(), smaPeriod) 

    def get_score(self,banana): # add : 
     fruit_lover= self.__sma 
     return fruit_lover + banana 

    def onBars(self, bars): 
     #for x in bars.getInstruments(): 
     list_large = {} 
     for y in testlist: 
      list_large.update({y : self.get_score(5)}) 
     self.list_large = list_large # save list_large 
s = MyStrategy('feed', 'inst') 
print(vars(s))   # look at attributes set in __init__ 
print(s.get_score(10)) # test get_score by itself 
s.onBars('bars')   # test onBars 
print(s.list_large) 

ここ

はいくつかのコードです
0009:~/mypy$ python stack40814540.py 
{'_MyStrategy__position': [], 
'_MyStrategy__instrument': 'inst', 
'_MyStrategy__sma': 100, 
'_MyStrategy__prices': 123} 
110 
{'TREE': 105, 'HAPPY': 105} 

私は他の方法で__sma属性にアクセスして何の問題もありません。

で始まり(__が終わらない)名前はvarsのように「擬似プライベート」変数としてコード化されています。しかし、それは別の方法からのアクセスを害することはありません。私はその機能をスキップ示唆し、ちょうどself.smaのような名前を使用したい初心者のために

。コードは簡単にデバッグできます。

変更内容を理解していることを確認してください。いくつかの同様のテストを実行します。私はこのようなかなりの数の質問を見てきました

関連する問題