МУНИЦИПАЛЬНОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ОБРАЗОВАНИЯ
«ЦЕНТР ДЕТСКОГО ТЕХНИЧЕСКОГО ТВОРЧЕСТВА»
Методическая разработка
«Инициализация экземпляра. Метод __init__ в Python»
к дополнительной общеобразовательной
общеразвивающей программе
технической направленности
«Программирование на Python»
Возраст детей: 10-17 лет
Автор: Костычев Вадим Александрович
г. Заречный Пензенской области
2025 г.
Одним из ключевых аспектов объектно-ориентированного программирования (ООП) в Python является инициализация объектов — процесс настройки начального состояния экземпляров класса. В Python за это отвечает специальный метод __init__, который автоматически вызывается при создании нового экземпляра класса. В этом методическом материале мы подробно разберём, что такое метод __init__, как он работает, какие возможности предоставляет, и рассмотрим примеры для лучшего понимания.
Метод __init__
Метод __init__ — это специальный (магический) метод в Python, используемый для инициализации атрибутов экземпляра класса. Он вызывается автоматически при создании нового объекта класса и позволяет задать начальные значения атрибутам объекта.
Метод __init__ не создаёт сам объект — эту задачу выполняет другой магический метод __new__. После создания объекта через __new__, вызывается __init__, где уже происходит его настройка.
Синтаксис метода __init__
Общая форма метода:
class ИмяКласса:
def __init__(self, параметр1, параметр2, ...):
self.атрибут1 = параметр1
self.атрибут2 = параметр2
где, self — обязательный первый параметр метода, который ссылается на сам экземпляр. Другие параметры передаются при создании объекта.
Обратите внимание: self — это соглашение, но вы можете использовать любое другое имя (хотя так делать не рекомендуется).
Примеры использования __init__
1. Простой пример
Создадим класс Person, который хранит имя и возраст человека:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# Создаём экземпляр класса
p = Person("Алексей", 30)
print(p.name) # Алексей
print(p.age) # 30
В этом случае при создании объекта p вызывается метод __init__, и устанавливается два атрибута: name и age.
Параметры по умолчанию
Вы можете указывать параметры по умолчанию, чтобы сделать некоторые аргументы необязательными:
class Car:
def __init__(self, brand, model="Unknown"):
self.brand = brand
self.model = model
# Использование с одним аргументом
car1 = Car("Toyota")
print(car1.brand, car1.model) # Toyota Unknown
# Использование с двумя аргументами
car2 = Car("BMW", "X5")
print(car2.brand, car2.model) # BMW X5
Инициализация сложных типов данных
Можно инициализировать списки, словари и другие структуры данных:
class Student:
def __init__(self, name, courses=None):
self.name = name
self.courses = courses if courses is not None else []
s = Student("Мария", ["Math", "History"])
print(s.courses) # ['Math', 'History']
Рекомендуется избегать изменяемые значения по умолчанию, таких как courses=[], потому что они будут разделяться между всеми экземплярами. Поэтому лучше использовать None и инициализировать внутри метода.
Различия между __init__ и __new__
__new__: вызывается до __init__, используется редко, обычно в продвинутых сценариях (например, иммутабельные типы, метапрограммирование).
__init__: чаще всего используется для инициализации атрибутов объекта.
Пример:
class MyClass:
def __new__(cls, *args, **kwargs):
print("Создание объекта")
return super().__new__(cls)
def __init__(self, value):
print("Инициализация объекта")
self.value = value
obj = MyClass(10)
Вывод:
Создание объекта
Инициализация объекта
Инициализация с наследованием
При наследовании важно правильно вызвать конструктор родительского класса. Для этого используется функция super().
class Animal:
def __init__(self, name):
self.name = name
class Cat(Animal):
def __init__(self, name, color):
super().__init__(name) # Вызов конструктора родителя
self.color = color
c = Cat("Мурзик", "черный")
print(c.name) # Мурзик
print(c.color) # черный
Если не вызвать super().__init__(), атрибуты родителя не будут установлены.
Аннотации типов
Начиная с Python 3.5, можно добавлять аннотации типов:
class Product:
def __init__(self, name: str, price: float):
self.name: str = name
self.price: float = price
Проверка входных данных
Можно добавить логику проверки значений прямо в __init__:
class Rectangle:
def __init__(self, width, height):
if width
raise ValueError("Ширина и высота должны быть положительными числами.")
self.width = width
self.height = height
try:
r = Rectangle(-5, 10)
except ValueError as e:
print(e) # Ширина и высота должны быть положительными числами.
Использование kwargs для гибкой инициализации
Иногда удобно принимать произвольное количество именованных аргументов:
class User:
def __init__(self, **kwargs):
self.name = kwargs.get('name')
self.email = kwargs.get('email')
u = User(name="Ольга", email="[email protected]")
print(u.name, u.email) # Ольга [email protected]
Метод __init__ — это важнейшая часть любого класса в Python. Он позволяет задавать начальное состояние объектов, управлять параметрами и обеспечивать гибкость при создании экземпляров.
Основные моменты:
__init__ — это конструктор, но не создатель объекта.
Используйте super() при наследовании.
Избегайте изменяемых значений по умолчанию.
Добавляйте аннотации типов и проверки входных данных для надёжности.
Удобно использовать *args и **kwargs для гибкой инициализации.