Форум сайта python.su
0
Подскажите пожалуйста,
создаю несколько объектов класса Tester, которые принимают в качестве параметра класс, который они создают и с ним работают. Если они создаются в цикле, то происходит “дозапись” в списки closedPositions.. (см код ниже) и в конце цикла в этих списках все записи всех объектов. Что будет при создании экземпляров класса в разных потоках, даже боюсь представить.
Я совсем новичок в python, по опыту других языков - каждый объект - отдельная сущность, переменные которой никак не могут пересекаться с одноименными переменными других объектов. Подскажите пожалуйста, где ошибаюсь. Спасибо.
модуль main ... for exitMinute in range(55, 60, 1): strategyParams = {'pOptimization': True,'pExitMinute': exitMinute} tester = Tester(data, t, strategyParams) tester.start() ... модуль tester ... class Tester(): positions = [] closedPositions = [] orders = [] def __init__(self, data, strategyClass, strategyParams = None): self.strategy = strategyClass(self, strategyParams) ... def closePosition(self, position, bar = None, price = 0, market = False): ... self.positions.remove(position) self.closedPositions.append(position) ... модуль t (наследование от strategy) ... class t(Strategy): def __init__(self, engine, params): ...
Отредактировано FishHook (Ноя. 30, 2012 12:51:53)
Офлайн
20
Что конкретно смущает?
Офлайн
0
Soteric“происходит “дозапись” в списки closedPositions.. (см код ниже) и в конце цикла в этих списках все записи всех объектов.” т.е. нескольких созданных объектов пишут в одни и те же переменные, хотя это обычные переменные класса (объекты которого создаются), глобально нигде не объявленные.
происходит “дозапись” в списки closedPositions.. (см код ниже) и в конце цикла в этих списках все записи всех объектов.
Отредактировано forregg (Ноя. 30, 2012 11:48:56)
Офлайн
20
Это нормально. Когда мы перезаписываем в переменную ссылку на другой объект, с исходным объектом ничего не случается. Он продолжает жить, просто эта переменная больше не указывает на него.
Офлайн
0
SotericТогда почему получается что у нескольких объектов общая переменная - список, в который они дописывают данные?
Это нормально. Когда мы перезаписываем в переменную ссылку на другой объект, с исходным объектом ничего не случается. Он продолжает жить, просто эта переменная больше не указывает на него.
Офлайн
20
А.. кажется я понял вопрос :)
class Tester():
positions = []
closedPositions = []
class Tester():
def __init__(self):
self.positions = []
self.closedPositions = []
Отредактировано Soteric (Ноя. 30, 2012 17:15:24)
Офлайн
0
SotericБольшое спасибо
А.. кажется я понял вопрос
Офлайн