Python __init__ не является конструктором глубокое погружение в создание объектов в Python

Python __init__ глубокое погружение в создание объектов в Python

Изучение конструктора Python для создания быстрых и эффективных по памяти классов

Как Python создает объекты (изображение от ChatGPT)

Вы знали, что метод __init__ не является конструктором? Но если __init__ не создает объект, то что это делает? Как объекты создаются в Python? Вообще у Python есть конструктор?

Cтатья написана с целью лучше понять, как Python создает объекты, чтобы мы могли его использовать для полезных приложений.

Сначала мы глубоко погрузимся в то, как Python создает объекты. Затем мы применим полученные знания и обсудим несколько интересных случаев с практическими примерами. Давайте начнем кодировать!

1. Теория: Создание объектов в Python

В этой части мы разберемся, что делает Python внутри, когда вы создаете объект. В следующей части мы применим это новое знание и применим его в части 2.

Как создать объект в Python?

Это должно быть довольно просто; вы просто создаете экземпляр класса. Альтернативно вы можете создать новый встроенный тип, такой как str или int. В приведенном ниже коде создается экземпляр базового класса. Он содержит только функцию __init__ и метод say_hello:

class SimpleObject:  greet_name:str  def __init__(self, name:str):    self.greet_name = name  def say_hello(self) -> None:    print(f"Привет, {self.greet_name}!")my_instance = SimpleObject(name="bob")my_instance.say_hello()

Обратите внимание на метод __init__. Он получает параметр name и сохраняет его значение в атрибуте greet_name экземпляра SimpleObject. Это позволяет нашему экземпляру сохранять состояние.

Теперь возникает вопрос: чтобы сохранить состояние, нам нужно иметь что-то, где можно сохранить состояние. Откуда берется объект для __init__?

Итак, __init__ это конструктор?

Ответ: технически – нет. Конструкторы фактически создают новый объект; метод __init__ отвечает только за задание состояния объекта. Он просто получает значения через свои параметры и присваивает их атрибутам класса, таким как greet_name.