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
Ответ 2
Переопределить __getattr__
; см. http://docs.python.org/reference/datamodel.html