我在一个叫做AlgoSystem的类中工作,这个类被赋予策略0和策略1作为初始化时的输入以及策略的数量(本例中为2)。策略类存储在系统中一个名为“strategies”的字典中。strategy\u 0和strategy\u 1本身是不同的类,但都有一个名为“\u on \u tick”的函数。我想从AlgoSystem类中调用这些函数。 我目前的尝试如下:
class AlgoSystem:
def __init__(self, strategy_0, strategy_1, numstrategies):
self.var= 1
self.strategies = {0 : strategy_0,
1 : strategy_1}
self.num_strategies = numstrategies
def start(self):
for i in range(self.num_strategies):
self.strategies[i].__on_tick(self.var)
class Strategy_zero:
def __init__(self, x):
self.x = x
def __on_tick(self, var):
self.x = self.x + var
print(self.x)
class Strategy_one:
def __init__(self, y):
self.y = y
def __on_tick(self, var):
self.y = self.y - var
print(self.y)
strategy_0 = Strategy_zero(2)
strategy_1 = Strategy_one(4)
num_strategies = 2
system = AlgoSystem(strategy_0, strategy_1, 2)
system.start()
当我运行上面的代码时,会出现以下错误:
Strategy_zero' object has no attribute '_AlgoSystem__on_tick'
显然我没有正确地调用类函数“\u on\u tick”。我该怎么做?我需要以某种方式来做,所以我通过在AlgoSystem中定义的字典“strategies”来跟踪两个子类(strategy\u0和strategy\u1)的变化
双下划线前缀是专门设计用来阻止你做你正在做的事情
你没有理由在这里使用它。去掉前缀,你的方法就可以
on_tick
下面的代码可能有助于澄清名称损坏的原因
因此,您可以将
self.strategies[i].__on_tick(self.var)
更新为:但是,最好不要在
__on_tick
前面加上双下划线,因为它是在类/实例之外访问的双下划线名称是隐藏的名称(通过模糊处理隐藏)。我建议您的on-tick方法在on-tick上调用,然后再试一次
相关问题 更多 >
编程相关推荐