如何从python中的其他函数访问变量

2024-10-02 16:30:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数(get\u score),它使用同一类中其他函数(self.\u sma)的变量。你知道吗

我的问题是:如何从get\u 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)})  

Tags: 函数selfgetinitdeffeedbananascore
1条回答
网友
1楼 · 发布于 2024-10-02 16:30:49

一份脚本,一堆存根,还有太多的语法修正:

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这样的名称。代码将更容易调试。你知道吗

确保您了解我的更改;并运行一些类似的测试。你知道吗

相关问题 更多 >