У меня есть класс из библиотеки, скажем MyClass
по методу my_method
.метод украшения после объявления
from MyLibrary import MyClass
obj = MyClass()
result = obj.my_method('arg')
Я не могу thouch оригинальной реализации, но я хочу, чтобы украсить my_method
, в частности, я хочу, чтобы проверить, если возвращаемое значение является not None
и в случае поднять исключение, как:
result = obj.my_method('arg')
if result is None: raise ValueError()
Это довольно скучно, так как мне нужно делать это много раз. В частности, я не хочу менять код, когда звоню obj.my_method('arg')
. Я пытаюсь:
def safe_method(self, *args):
result = self.my_method(*args)
if result is None: raise ValueError()
return result
MyClass.my_method = safe_method
это не работает:
RuntimeError: maximum recursion depth exceeded while calling a Python object
Я понимаю, почему, но я не могу решить проблему
это работает, но мне кажется, что это грязный трюк –