Используя другое имя для init в Python - PullRequest
0 голосов
/ 05 марта 2019

Я изучаю реализацию структур данных с использованием Python. Я понял, что метод __init__ используется в качестве конструктора (я читал это в C ++), я сомневаюсь,

можем ли мы использовать какое-то другое имя, например __loader__ вместо __init__, и получить результаты?

Является ли ключевое слово init или просто соглашением, подобным использованию подчеркивания в начале имен внутренних переменных (игнорируя его использование в , исключая импорт )

Ответы [ 3 ]

4 голосов
/ 05 марта 2019

__init__ - это метод, который будет вызываться как часть процесса создания объекта.Если у вашего объекта нет метода с точно таким именем, он не будет вызываться во время создания объекта.Конечно, вы можете вызвать любой другой метод в любое время самостоятельно, но это не будет частью создания объекта.

Это не ключевое слово, а зарезервированное имя метода дляособая цель.Так же, как вы не могли реализовать пользовательскую функцию сравнения как __foobar__ вместо __lt__ и все еще ожидали, что она будет вызываться при выполнении a < b.

1 голос
/ 05 марта 2019

Это не ключевое слово :

>>> import keyword
>>> keyword.iskeyword('__init__')
False

Но это не просто соглашение. ссылка на язык гласит:

Классы могут быть вызваны. [...] Аргументы вызова передаются __new__() и, в типичном случае, __init__() для инициализации нового экземпляра.

Более подробная информация доступна в документации для __init__()

1 голос
/ 05 марта 2019

Нет, ты не можешь.Вы не можете этого сделать, потому что при создании экземпляра объекта вашего класса по умолчанию будет вызываться метод object.__init__() (потому что по умолчанию ваш класс наследуется от object).

И если вы хотите инициализировать ваш объектиначе вы должны переопределить этот метод.И единственный способ переопределить метод родительского класса в python - это определить дочерний метод с тем же именем, то есть определить __init__() в вашем классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...