2016-03-01 5 views
0

Я пытаюсь создать новый экземпляр класса внутри функции. Экземпляр создается впервые в первый раз, хотя, когда я пытаюсь создать дополнительный экземпляр (пересматривая маршрут), я возвращаю ссылку на исходный объект.Как заставить новый экземпляр класса SQLAlchemy

Это происходит из-за того, как я создал приложение. См упрощенного код ниже:

@tests.route('/generate_test/<t_type>', methods=['GET']) 
def generate_test(t_type): 
    test_obj = t[t_type]['obj'] 
    ... 
    return test_obj 

Где т представляет собой словарь, как показано ниже:

t = { 
    'footests': {'obj': FooTest(), 
        'name': 'Foo Test', 
        ... 
        }, 
    ... 
} 

Поскольку существует много различных типов тестов, я надеялся, что я мог бы использовать этот метод, чтобы обеспечить все дополнительные детали которые связаны с определенным типом теста. Когда я первый сгенерирует новый тест, тест объект FooTest является новым, то есть id = None т.д.

Хотя, когда я пришел через второй раз и попытаться создать новый тест, экземпляр в словаре t до сих пор ассоциируется с тест экземпляр с первого раза, то есть id = <id_from_last_time>

Я пытался вычеркнуть объект с помощью db_session.expunge(test_obj) и del(test_obj) (как в моем Flask маршрута), хотя я все еще получаю ссылку на исходный объект.

Я хочу, чтобы словарь t предоставил экземпляр нового объекта каждый раз, когда я его вызываю.

ответ

1

Если я правильно понял ваш вопрос, вам просто нужно создать экземпляр при каждом вызове маршрута, а не просто прочитать значение ранее созданного экземпляра.

В вашем маршруте:

test_obj = t[t_type]['obj']() 

В вашем t определение:

t = { 
    'footests': {'obj': FooTest, 
        'name': 'Foo Test', 
        ... 
        }, 
    ... 
} 
Смежные вопросы