Python: как перехватить вызов метода, который не существует?

Я хочу создать класс, который не предоставляет Attribute Error при вызове любого метода, который может или не может существовать:

Мой класс:

class magic_class:
    ...
    # How to over-ride method calls
    ...

Ожидаемый результат:

ob = magic_class()
ob.unknown_method()
# Prints 'unknown_method' was called

ob.unknown_method2()
# Prints 'unknown_method2' was called

Теперь unknown_method и unknown_method2 на самом деле не существует в классе, но как мы можем перехватить вызов метода в python?

Ответ 1

Перезаписать магический метод __getattr__():

class MagicClass(object):
    def __getattr__(self, name):
        def wrapper(*args, **kwargs):
            print "'%s' was called" % name
        return wrapper

ob = MagicClass()
ob.unknown_method()
ob.unknown_method2()

печатает

'unknown_method' was called
'unknown_method2' was called