Рубрики
Без рубрики

Что такое __init__ в Python?

Чтение по сравнению с другими людьми Python Code, начинающие часто спотыкаются над методом __init __ (Self). Какова его цель? Эта статья отвечает на этот вопрос один раз и для всех.

Автор оригинала: Chris.

При чтении кода Python других людей многие новички озадачены __init __ (Я) метод. Какова его цель? Эта статья отвечает на этот вопрос один раз и для всех.

Какова цель __само по себе) в Python?

Зарезервированный метод Python __init __ () называется Конструктор класса. Вы можете вызвать метод конструктора для создания объекта) из класса и инициализировать его атрибуты.

Хотя это отвечает на вопрос, если у вас есть какие-либо амбиции в становлении профессионального Python Coder, этого недостаточно знать, что __init__ Метод – конструктор класса. Вам также необходимо знать, как использовать конструктор в своих собственных проектах – и как настроить его аргументы. Тщательное понимание конструктора служит сильной основой для более продвинутых концепций в объектно-ориентированном программировании Python. Читайте дальше, чтобы узнать другую половину уравнения.

Интерактивный пример Раньше я объясню это вам, давайте откроем свой разрыв в знании. Рассмотрим следующий пример:

Упражнение : Добавьте один цвет аргумента на __в этом__ Способ и сделайте код выполнения без ошибок!

Давайте погрузимся в этот простой пример значительно детально.

Как использовать метод __init__ на практике? Простой пример

Мы будем использовать некоторые условия объектно-ориентированного программирования в Python, чтобы объяснить наш пример. Обязательно изучите следующий чит-лист (вы также можете загрузить PDF здесь). Нажмите на изображение, чтобы получить чит-лист (открывается на новой вкладке). Если вам уже комфортно с базовыми объектами-ориентационными терминами, такими как классы и экземпляры, просто прочитанные.

Вы узнали, что __init__ Метод – это конструктор метода класса. Вы называете метод конструктора для создания новых экземпляров (или объектов ). Но как именно это играет на практике? Прежде чем мы погрузимся в правильное использование, нам нужно понять Аргументы (или Параметры ) метода конструктора.

Самоустройство

__init__ Конструктор требует хотя бы одного аргумента. Согласно Pep8 Standard Хорошая практика для обозначения этого аргумента как Я Отказ В любом случае, Я Аргумент указывает на вновь созданный сам экземпляр, и он позволяет вам манипулировать атрибутами экземпляра нового экземпляра. В приведении собаки вы бы использовали Self.color Чтобы установить недавно созданную собаку цвет атрибут строке "синий" Отказ

Давайте посмотрим на следующий базовый код примера:

class Dog:

    def __init__(self):
        self.color = "blue"


bello = Dog()
print(bello.color)
# blue
  1. Мы создаем новую собаку класса с конструктором __init __ (Я) Отказ
  2. Мы создаем новый экземпляр класса Собака назван Белло Отказ Есть два интересных наблюдения: во-первых, мы используем имя класса, а не имя конструктора для создания нового экземпляра. Python внутренне называет метод __init__ для нас. Во-вторых, мы не передаем никаких аргументов при звонке Собака () Отказ Опять же, Python неявно передает ссылку на вновь созданный экземпляр ( Bello ) к конструктору __init__ Отказ
  3. Мы распечатаем цвет атрибута вновь созданного Белло пример. Результатом является строковое значение "синий" Как определено в конструкторе.

Однако этот минимальный пример нереально. Некоторые собаки коричневые, другие черные, и только некоторые голубые.

Множественные аргументы конструктора

Так как мы можем создать разные собаки с разными цветами? Мы можем легко добиться этого, используя больше аргументов, в дополнение к Я , при определении нашего конструктора __init__ Отказ Вот еще один пример, где мы создаем две собаки разными цветами. Можете ли вы заметить их цвета?

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown

В отличие от первого примера, теперь мы определяем конструктор __init __ (я, цвет) с двумя аргументами, а не один.

Первый – это Я аргумент как раньше. Второй является пользовательским аргументом цвет это передается абонентом конструктора. В нашем случае мы создаем две экземпляры собак, Белло и Алиса , указав цвет аргумент для обоих.

Обратите внимание, что Я Аргумент неявно обрабатывается средой программирования Python: Python просто передает ссылку на соответствующую Собака Экземпляр к __init__ конструктор.

В чем разница между конструктором и инициатором?

Ну, я не использовал очень точную терминологию в предыдущих пунктах. Я использовал термин «конструктор» для обоих звонков Собака () и звонок __init __ () Отказ Но только прежний звонок может быть обозначен как Метод конструктора Потому что только этот звонок на самом деле создает новый экземпляр. В то время мы называем метод __init__ , экземпляр уже создан (Python передает его нам через Я Аргумент). Вот почему более точный термин для __init__ Метод это метод инициализатора Отказ Вот как я буду обозначать его в следующем, чтобы добраться до этого. 😉.

В чем смысл подчеркивает на имя метода __init__?

Я написал целую статью о значении подчеркивания в Python. Проверьте это, если эта тема интересует вас дальше. Ключевой вынос, однако, следующий:

Двойной подчеркивание «__» (называемое «Dunder» ) используется для создания атрибута экземпляра или метод частным (не может быть доступен из-за пределов класса) – при использовании в качестве ведущего разведения. При использовании в качестве приколного разъема (например, «__init__») это указывает на то, что он является специальным методом в Python (называемый «MAGIC MESTORM»).

Как использовать __init__ в унаследованном классе?

Унаследованный класс – это класс, который наследует все атрибуты и методы из родительского класса. Вот пример:

class Dog:
    def __init__(self, color):
        self.color = color
        

class CuteDog(Dog):
    def __init__(self, color):
        Dog.__init__(self, color)
        self.hairs = True


bello = CuteDog('brown')
print(bello.hairs)
# True

print(bello.color)
# brown

Наследование очень важно в Python. В примере родительский класс является собакой класса, которую вы уже знаете сверху. Метод инициализатора __init__ определяет цвет этой собаки.

Теперь мы также создаем новый класс Cutedog который наследует все атрибуты из родительского класса Собака Отказ Вы можете определить наследование, указав имя родительского класса в скобках после дочернего класса: Cutedog (Собака) Отказ

Интересная вещь состоит в том, что метод __INIT__ для CuteDog Class CuteDog вызывает метод __init__ из родительского класса. Это имеет смысл, потому что у ребенка класс имеет одинаковые атрибуты, что и родительский класс – и их тоже нужно инициализировать.

Чем больше питоновый способ, однако, это использовать Super () Функция, которая облегчает доступ к родительскому классу:

class Dog:
    def __init__(self, color):
        self.color = color
        

class CuteDog(Dog):
    def __init__(self, color):
        super().__init__(color)
        self.hairs = True


bello = CuteDog('brown')
print(bello.hairs)
# True

print(bello.color)
# brown

С помощью Super () Функция, вы можете легко повторно использовать метод инициализатора родительского класса.

Давайте посмотрим на несколько связанных вопросов.

__ in init ___ необходимо в Python?

Нет. Вы можете просто пропустить метод инициализатора. В результате ваш класс не будет иметь никаких атрибутов экземпляра непосредственно после его создания. Тем не менее, вы можете добавить атрибуты экземпляра динамически в любой момент времени. Вот пример:

class Dog:
    None
        

bello = Dog()
bello.color = "blue"
print(bello.color)
# blue

Как красиво! Вы даже можете создавать пустые классы и «заполнить» методы и атрибуты позже в Python.

Что __ init __ возвращение?

То __в этом__ Сам метод ничего не возвращает. Технически, Python впервые использует метод конструктора Собака() до того, как он использует __в этом__ инициализировать все атрибуты. Следовательно, только конструктор возвращает вновь созданный экземпляр.

Может __init__ вернуть значение?

Нет. Единственное возвращаемое значение, которое не вызывает ошибку времени выполнения Никто Отказ Все остальные значения возврата вызывают ошибку. См. В следующем примере кода:

class Dog:

    def __init__(self, color):
        self.color = color
        return 0
        

bello = Dog("blue")
# TypeError: __init__() should return None, not 'int'

Поэтому никогда не используйте возвращаемое значение в методе __init__, и вы хорошо пойти.

Куда пойти отсюда?

Спасибо за чтение по всей статье. Вы узнали, что __init__ Имя зарезервировано для метода инициализатора Python, который вызывается внутри конструктора.

Статья требует тщательного понимания оснований Python. Инвестирование времени на изучение и изучение тех, кто имеет жизненно важное значение для вашего успеха в качестве профессионального кодера.

Чтобы помочь людям вырастить свои навыки в автоматизированном виде, я создал бесплатный курс по электронной почте Python «Phython Coffee Rapace», который растут вашим уровнем навыка кажутся непременно. День за днем после дня …

Присоединяйтесь к десяткам тысяч кодов Python (100% бесплатно)!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.