JavaRush /Курсы /Модуль 1: Python Core /Инициализация объекта

Инициализация объекта

Модуль 1: Python Core
9 уровень , 3 лекция
Открыта

4.1 Инициализация

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

Такой процесс называется инициализацией и должен проходить сразу после создания объекта.

Допустим, у вас есть класс Кот (Cat), и вы хотите задать ему имя и возраст, это можно сделать несколькими способами:

Инициализация атрибутов после создания объекта

В этом примере сначала создаётся:

  • пустой объект Cat.
  • экземпляр класса Cat с именем barsik.
  • а затем у объекта barsik устанавливаются два атрибута: name и age добавляются непосредственно к объекту.


class Cat:
    pass
        

# Создание объекта Cat
barsik = Cat()
        
# Инициализация атрибутов после создания объекта
barsik.name = "Barsik"
barsik.age = 5
        
print(f"Имя кота: {barsik.name}, возраст: {barsik.age}")  # Вывод: Имя кота: Barsik, возраст: 5

Использование метода для инициализации атрибутов

В этом примере для инициализации атрибутов используется метод initialize. Объект Cat создаётся без единого атрибута, а затем метод initialize() используется для задания значений атрибутов.


class Cat:
    def initialize(self, name, age):
        self.name = name
        self.age = age
        

# Создание объекта Cat
barsik = Cat()
        
# Инициализация атрибутов через метод
barsik.initialize("Barsik", 5)
        
print(f"Имя кота: {barsik.name}, возраст: {barsik.age}")  # Вывод: Имя кота: Barsik, возраст: 5

Использование полей класса

В этом примере атрибуты name и age определены на уровне класса. После создания объекта barsik атрибуты инициализируются непосредственно.


class Cat:
    name = ""
    age = 0
        

# Создание объекта Cat
barsik = Cat()
        
# Инициализация атрибутов объекта
barsik.name = "Barsik"
barsik.age = 5
        
print(f"Имя кота: {barsik.name}, возраст: {barsik.age}")  # Вывод: Имя кота: Barsik, возраст: 5

Какой способ лучше? Никакой! Лучше всего использовать конструктор :)

4.2 Конструктор

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

В Python конструктором является метод по имени __init__. Вот основные факты о нём:

  • Метод __init__ — это конструктор в Python. Он вызывается автоматически, когда создаётся новый экземпляр класса.
  • __init__ принимает как минимум один параметр — self, который ссылается на создаваемый объект. Дополнительно могут быть переданы другие параметры для инициализации атрибутов объекта.
  • Внутри метода __init__ можно задавать начальные значения атрибутов объекта, используя self.
  • Конструктор может выполнять любые действия, необходимые для настройки объекта, например, проверку входных данных или установку связей с другими объектами.

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

Вот как будет выглядеть инициализация нашего кота с использованием конструктора:


class Cat:
    def __init__(self, name, age):
        self.name = name
        self.age = age


# Создание объекта Cat с именем и возрастом
barsik = Cat("Barsik", 5)

print(f"Имя кота: {barsik.name}, возраст: {barsik.age}")  # Вывод: Имя кота: Barsik, возраст: 5

После создания объекта типа Cat будет автоматически вызван метод __init__, и в него передадутся три параметра:

  • Ссылка на объект barsik в параметр self
  • Строка «Барсик» в параметр name
  • Число 5 в параметр age

Это удобно и красиво.

Валидация данных

Также в конструкторе можно выполнять валидацию данных. Ведь цель конструктора — это сформировать валидный (правильный) объект, с которым дальше можно работать. Пример:


class Cat:
    def __init__(self, name, age):
        if age < 0: raise ValueError("Возраст не может быть отрицательным")
        self.name = name
        self.age = age


# Создание объекта Cat с проверкой возраста
try:
    barsik = Cat("Barsik", -3)
except ValueError as e:
    print(e)  # Вывод: Возраст не может быть отрицательным
               
2
Задача
Модуль 1: Python Core, 9 уровень, 3 лекция
Недоступна
Прямоугольники.
Прямоугольники.
2
Задача
Модуль 1: Python Core, 9 уровень, 3 лекция
Недоступна
Банкир.
Банкир.
Комментарии (9)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Юрий Уровень 30
24 августа 2025
задача банкир, такое себе удовольствие на лоу левле
Slevin Уровень 64
2 июля 2025
Теперь я знаю как хакать банкоматы, больше мне не нужно становиться погромистом!!
mila Уровень 20
21 апреля 2025
"Это удобно и красиво."😆
SWK Уровень 26
4 апреля 2025
"Несколько операций" - это, по мнению авторов, не менее 2х каждого вида.
Дмитрий Уровень 29
23 марта 2025
Какие то баги у вас с проверкой, в первом задании, первый раз сделал через return метод, выдал ошибку, переделал на печать, пишет сделайте метод чтобы он возвращал!!! Это просто дрочь какая-то, как тогда в первый раз вышла такая ошибка...
Mr.Robot Уровень 21 Expert
8 марта 2025
Ко второй задаче осталось прикрутить PostgreSQL и простейшая АБС готова! )))
Екатерина Уровень 76
15 августа 2024
Везде в методах класса нужно первым входным параметром прописывать self
Dmitry Ryabov Уровень 23
3 февраля 2025
Это справедливо, если эти методы относятся к объектам класса
Дмитрий Уровень 27
12 марта 2025
Наверное, всё-же, cls? Это же метод класса. self ставится первым аргументом в методах экземпляра же?