, чтобы автоматически генерировать параметризованные тесты, я пытаюсь добавить методы в класс путем замораживания некоторых параметров существующего метода. Вот фрагмент кода Python 3С помощью setattr, чтобы заморозить некоторые параметры метода
class A:
def f(self, n):
print(n)
params = range(10)
for i in params:
name = 'f{0}'.format(i)
method = lambda self: A.f(self, i)
setattr(A, name, method)
Однако, следующие строки, а затем производят Неудовлетворительно OUTPUT
a = A()
a.f0()
отпечатки "9" (вместо "0"). Я должен что-то делать неправильно, но я не вижу, что. Вы можете помочь ?
Большое спасибо
Edit: этот вопрос действительно является дубликатом. Я хотел бы отметить качество всех комментариев, которые идут гораздо глубже, чем исходный ответ.
для таких вещей в тестах try [mock] (http://www.voidspace.org.uk/python/mock/) – warvariuc
Возможный дубликат [Генерирующие функции внутри цикла с выражением лямбда в python] (http: // stackoverflow.com/questions/1841268/generating-functions-inside-loop-with-lambda-expression-in-python) – delnan
@warwaruk: посмотрев на краткое руководство по началу работы, я не уверен, как макет может помочь ... но Я очень рад узнать об этом пакете. Может оказаться полезным в какой-то момент. – Sebastien