Шаблон для определения переменных в классах выглядит следующим образом:
class Xxxx:
staticVar = ...
def __init__(self):
self.instanceVar = ...
Таким образом, каждая переменная, используемая в классе, должна быть определена:
- либо как статическая переменная (не "принадлежащая" какому-либо конкретному экземпляру этого класса), созданная в этом классе вне какого-либо метода,
- или как экземпляр переменная (принадлежит конкретномуinstance), созданный конструктором.
Переменная класса также может быть определена в другом методе этого класса.
Ваш код содержит единственное место, где self. данные назначаются в StockData.stock методе, но этот метод вызывается никогда .
Другие места, где вы ссылаетесь на self.data имеют вид:
self.data[...] = self.data[...]...
, поэтому на данный момент эта переменная должна быть создана раньше.
Одним из возможных решений является добавление конструктора (возможно, к StockData ) и установите эту переменную в любое значение по вашему желанию.
Или, может быть, выдолжен вызывать stock где-нибудь в вашем коде?
Другая концепция заключается в следующем:
- превратить эту функцию в конструктор (оставив параметр symbol ),
- когда вы вызываете sma = Backtest () , передайте некоторое значение для этого параметра.
Но, вероятно, вам следует изменить append до расширить . Причина в том, что если вы передадите строку как символ , на самом деле это также список символов, поэтому тикер будет содержать отдельные символы . Но если вы измените на extension , вся строка будет добавлена как один элемент.