[英]How to access variables from other functions in python
我有一个函数(get_score),该函数使用同一类中其他函数(self .__ sma)的变量。
我的问题:如何从get_score函数访问这些变量? (错误:未定义全局名称)。
另外,我听说使用全局变量会引起混乱(仅根据我在此处阅读的内容)。 提前致谢。
这是一些代码:
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)})
有了脚本副本,一堆存根和太多语法更正:
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
类的self.sma
。 代码将更易于调试。
确保您了解我的更改; 并运行一些类似的测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.