Метод __call__ вызывается при обращении к экземпляру как к функции. Это не повторяющееся определение – если метод __call__ присутствует, интерпретатор будет вызвать его, когда экземпляр вызывается как функция, передавая ему любые позиционные и именованные аргументы:
|
>>> class CallMe: def __call__(self, *args, **kwargs): # Реализует вызов экземпляра print('Called:', args, kwargs) # Принимает любые аргументы ... ... >>> C = CallMe() >>> C(4,5,6) Called: (4,5,6) {} >>> c(5,6,7, x = 10, y = 20) Called: (5,6,7) {'x' : 10, 'y': 20 } |
Выражаясь более формальным языком, метод __call__ поддерживает все схемы передачи аргументов. Все что передается экземпляру, передается этому методу наряду с обычным аргументом self, в котором передается сам экземпляр. Например, следующие определения метода: Continue reading →