How to intercept a method call which doesn't exist?

python

Solution

Overwrite the `__getattr__()` magic method:

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()

prints

'unknown_method' was called
'unknown_method2' was called

Problem

I want to create a class that doesn't gives an `Attribute Error` on call of any method that may or may not exists: My class: ``` class magic_class: ... # How to over-ride method calls ... ``` Expected Output: ``` ob = magic_class() ob.unknown_method() # Prints 'unknown_method' was called ob.unknown_method2() # Prints 'unknown_method2' was called ``` Now, `unknown_method` and `unknown_method2` doesn't actually exists in the class, but how can we intercept the method call in python ?

Original source

Related problems