tgoop.com/PythonPortal/4520
Last Update:
Многие разработчики на Python считают метод __init__()
конструктором, но на самом деле это не так.
Настоящий конструктор в Python — это метод __new__()
. Давайте разберёмся, как это доказать, на небольшом примере.
Сначала добавим несколько print-вызовов в метод __init__()
, чтобы понять, что происходит при создании экземпляра класса: (2 фото)
Теперь добавим метод __new__()
и посмотрим, вызывается ли __init__()
до или после __new__()
. (3 фото)
Если запустить этот код, станет видно, что первым вызывается именно метод __new__()
Хочу отметить, что в большинстве случаев вам не придётся использовать метод __new__()
в своём коде. На практике он применяется почти исключительно в метапрограммировании, фабричных функциях и при работе с API — по крайней мере, из того, что мне доводилось видеть.
Так что продолжайте спокойно использовать проверенный метод __init__()
— он по-прежнему отлично справляется со своей задачей