Код: Выделить всё
def wrapper(original_method):
def wrapped_method(*args, **kwargs):
logging.info(args)
return original_method(*args, **kwargs)
return wrapped_method
foo.bar = wrapper(foo.bar)
foo.baz = wrapper(foo.baz)
foo.bear = wrapper(foo.bear)
Код: Выделить всё
wrapped_funcs = [
attr for attr in dir(self.foo)
if isinstance(eval(f"self.foo.{attr}", {"self": self}), types.FunctionType)
] # Non-monkey-patched methods are types.MethodType
for func in wrapped_funcs:
with patch("logging.info") as mocked_logger:
eval(f"self.foo.{func}('bar')")
mocked_logger.assert_called_once()
Итак, мой вопрос: почему eval имеет доступ к себе из цикла for, но не из понимания списка? Область видимости будет одинаковой для обоих вызовов.
Подробнее здесь: https://stackoverflow.com/questions/792 ... rehensions
Мобильная версия