При чтении кода 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
- Мы создаем новую собаку класса с конструктором
__init __ (Я)
Отказ - Мы создаем новый экземпляр класса
Собака
названБелло
Отказ Есть два интересных наблюдения: во-первых, мы используем имя класса, а не имя конструктора для создания нового экземпляра. Python внутренне называет метод __init__ для нас. Во-вторых, мы не передаем никаких аргументов при звонкеСобака ()
Отказ Опять же, Python неявно передает ссылку на вновь созданный экземпляр (Bello
) к конструктору__init__
Отказ - Мы распечатаем цвет атрибута вновь созданного
Белло
пример. Результатом является строковое значение"синий"
Как определено в конструкторе.
Однако этот минимальный пример нереально. Некоторые собаки коричневые, другие черные, и только некоторые голубые.
Множественные аргументы конструктора
Так как мы можем создать разные собаки с разными цветами? Мы можем легко добиться этого, используя больше аргументов, в дополнение к Я
, при определении нашего конструктора __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 и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.