Задать вопрос
Julila
@Julila
вечный студент / german version

В чем разница между __init__ и __call__ ?

В чем разница между __init__ и __call__ ?
Где можно про них прочесть на русском языке?
и как они вообще называются - методы?
Спасибо
  • Вопрос задан
  • 20815 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
ali_aliev
@ali_aliev
Разработчик на Django/Python, JavaScript
__init__ это обычный конструктор, __call__ вызов объекта как функцию. Изначально необходимо понять, что все в питоне является объектом в том числе и функции, поэтому метод __call__ есть и у функций. Этот факт очень легко проверить:

>>> def name():
...     pass
...
>>> dir(name)
['__call__', ...


Если вы создадите класс с методом __call__ и создадите объект, у вас объект "превратится" в функцию. Например:

>>> class Name(object):
...     def __call__(self, first, second):
...         return first + second
...
>>> f = Name()
>>> f(1,2)
3
>>>


В питоне нет магических методов (как их принято называть в пхп). Есть например методы для перегрузки операторов (__getitem__, __setitem__, __index__), протокол итерации (__iter__, __next__), протокол контекстных менеджеров (__exit__, __enter__), управляемые атрибуты (__getattr__, __setattr__, __slots__, __getattribute__), протоколы дескрипторов (__get__, __set__, __delete__) ну и т.д. :)

P.S. как всегда рекомендую Лутца, там все очень подробно расписано
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы