Является ли __init__
в python конструктором или методом?Является ли это конструктором или методом
Где-то он говорит конструктор, и где-то он говорит о методе, что довольно сбивает с толку.
Является ли __init__
в python конструктором или методом?Является ли это конструктором или методом
Где-то он говорит конструктор, и где-то он говорит о методе, что довольно сбивает с толку.
Это правильно назвать его метод. Это неверно или, в лучшем случае, неточно, называть его конструктором .
В частности, это magic method. Их также называют специальными методами, «dunders» и несколькими другими именами.
Этот конкретный метод используется для определения поведения инициализации объекта. Это не похоже на конструктор, и даже не первый метод вызывается в новом экземпляре.
Мы используем __init__
для настройки состояния уже созданного экземпляра. Он будет вызываться автоматически, когда мы используем синтаксис A()
для создания экземпляра класса A
, поэтому кто-то может свободно ссылаться на него как на «конструктор». Но ответственность __init__
не связана с построением экземпляра, действительно, магический метод __new__
больше похож на конструктор в этом отношении.
В дополнение к ответу @wim стоит отметить, что объект уже создан к моменту, когда __init__
называется i.e. __init__
не является конструктором. Кроме того, методы __init__
: необязательный: вам не нужно его определять. Наконец, метод __init__
определен сначала только по соглашению, то есть он может быть определен после любого из других методов.
В [5.3.1. Инициализация и кодирование классов] (http://www.diveintopython.net/object_oriented_framework/defining_classes.html#d0e11720) _Dive Into Python_ говорит: «Было бы заманчиво, но некорректно называть это конструктором» и объясняет, почему. – martineau