Почему метод __init__() всегда вызывается после __new__() в Python?

Перейти в телеграм, чтобы получить результаты теста
Пройдите тест, узнайте какой профессии подходите
Вам подходит профессия:
Аналитик данных
Основные характеристики профессии:
не нужно общаться с людьми
логика
анализ
поиск закономерностей
работа с числами
Построим личный план перехода в профессию для вас бесплатно
- убедитесь, подходит вам профессия или нет
- получите оценку своих навыков и шансов освоить профессию
- забронируем за вами скидку 55% на обучение, пока думаете
Позвоним вам в течение часа — не пропустите звонок
Чем занимается специалист
Специалист создает все онлайн-продукты, программы, приложения, игры и сайты, которыми вы пользуетесь каждый день.
Создает — значит описывает последовательность действий на специальном языке программирования. Настраивает действия, что должно произойти, если пользователь нажмет на кнопку.
Средняя зарплата начинающего специалиста в первый год работы:
от 50 000 ₽
Что надо знать и уметь, чтобы выучиться на аналитика:
- базовое школьное образование
- уверенные навыки работы с компьютером
- опыт выполнения задач в конкретные сроки
Глубокие знания математики или английского не нужны
Почему мы рекомендуем вам эту профессию
Ваш скрытый талант:
наблюдательность
При создании объекта в Python, например экземпляра класса, происходит два важных этапа: создание экземпляра и его инициализация. Первый этап выполняется
При создании объекта в Python, например экземпляра класса, происходит два важных этапа: создание экземпляра и его инициализация. Первый этап выполняется методом new(), а второй — init().
Рассмотрим пример:
class MyClass:
def __new__(cls):
print("Метод __new__ вызван")
instance = super().__new__(cls)
return instance
def __init__(self):
print("Метод __init__ вызван")
obj = MyClass()
Вывод:
Метод __new__ вызван
Метод __init__ вызван
Метод new() вызывается при создании нового экземпляра класса. Он отвечает за выделение памяти под новый объект и возвращает этот объект. new() является статическим методом и должен возвращать экземпляр класса.
С другой стороны, метод init() вызывается после new(), когда объект уже создан. Он отвечает за инициализацию этого объекта, то есть задаёт начальные значения его атрибутов.
Следовательно, init() всегда вызывается после new(), так как объект должен быть создан перед тем, как он будет инициализирован.
Это поведение является стандартным для Python и в большинстве случаев не требует изменений. Однако, если по какой-то причине требуется изменить этот процесс, можно переопределить методы new() и init(). Например, можно предотвратить вызов init() после new() путём возвращения другого объекта из метода new().
Добавить комментарий