2015-04-01 2 views
1

Является ли __init__ в python конструктором или методом?Является ли это конструктором или методом

Где-то он говорит конструктор, и где-то он говорит о методе, что довольно сбивает с толку.

+0

В [5.3.1. Инициализация и кодирование классов] (http://www.diveintopython.net/object_oriented_framework/defining_classes.html#d0e11720) _Dive Into Python_ говорит: «Было бы заманчиво, но некорректно называть это конструктором» и объясняет, почему. – martineau

ответ

6

Это правильно назвать его метод. Это неверно или, в лучшем случае, неточно, называть его конструктором .

В частности, это magic method. Их также называют специальными методами, «dunders» и несколькими другими именами.

Этот конкретный метод используется для определения поведения инициализации объекта. Это не похоже на конструктор, и даже не первый метод вызывается в новом экземпляре.

Мы используем __init__ для настройки состояния уже созданного экземпляра. Он будет вызываться автоматически, когда мы используем синтаксис A() для создания экземпляра класса A, поэтому кто-то может свободно ссылаться на него как на «конструктор». Но ответственность __init__ не связана с построением экземпляра, действительно, магический метод __new__ больше похож на конструктор в этом отношении.

0

В дополнение к ответу @wim стоит отметить, что объект уже создан к моменту, когда __init__ называется i.e. __init__ не является конструктором. Кроме того, методы __init__: необязательный: вам не нужно его определять. Наконец, метод __init__ определен сначала только по соглашению, то есть он может быть определен после любого из других методов.

Смежные вопросы