Атрибуты экземпляра

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

Этот урок посвящен одной из ключевых концепций объектно-ориентированного программирования (ООП) в Python — атрибутам экземпляра. Классы — это чертежи, а экземпляры (объекты) — это конкретные реализации этих чертежей. Чтобы объекты могли хранить данные (состояние), мы используем атрибуты.

В этом уроке вы узнаете:

  • Как объявлять атрибуты внутри специального метода __init__.
  • Зачем нужно ключевое слово self и как оно связывает данные с конкретным объектом.
  • Как получать доступ к атрибутам и изменять их значения.
  • Почему изменение атрибута в одном объекте не влияет на другие объекты того же класса.

Мы пройдем путь от создания простейшего класса с одним полем до работы с множеством независимых объектов. Будьте внимательны к синтаксису: в Python отступы и ключевое слово self играют решающую роль!

Список тем

1. Первое знакомство с атрибутами

id: 40090_task1

Перед вами простой класс Cat. Метод __init__ создает атрибут name для каждого нового кота. Проанализируйте код и определите, что будет выведено на экран.

Выберите правильный вариант ответа
class Cat:
    def __init__(self, name):
        self.name = name

my_cat = Cat("Barsik")
print(my_cat.name)
Сообщения
Проверить
Показать подсказку

2. Инициализация атрибута

id: 40090_task2

Допишите код класса Car. Необходимо, чтобы метод __init__ принимал цвет автомобиля и сохранял его в атрибут экземпляра color.

Заполните пропуски
class Car:
    def __init__(self, color):
        input1S.color = input2S

auto = Car("Red")
print(auto.color)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Потерянный self

id: 40090_task3

Программист хотел сохранить имя игрока в атрибут, но допустил ошибку, из-за которой атрибут не создается, а создается лишь локальная переменная. Найдите и исправьте строку с ошибкой.

Найдите ошибку и исправьте
class Player:
    def __init__(self, nickname):
        nickname = nickname
p1 = Player("ProGamer")
print(p1.nickname)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Сборка класса с атрибутом по умолчанию

id: 40090_task4

Соберите код, который создает класс Counter. При инициализации у счетчика должен создаваться атрибут count, равный 0 (значение по умолчанию, аргументы для этого не нужны). Затем создайте объект и выведите его счетчик.

Перетяните в правильном порядке строки из одного блока в другой
self.count = 0
class Counter:
    def __init__(self):
c = Counter()
print(c.count)
self.count = count
    def __init__(self, count):
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Атрибут или Локальная переменная?

id: 40090_task5

Распределите строки кода по категориям. Одни относятся к созданию/изменению атрибута экземпляра (который "живет" вместе с объектом), другие — к обычным локальным переменным или аргументам.

Перетяните элементы в соответствующие блоки
Атрибут экземпляра
Локальная переменная / Аргумент
self.age = 25
total = 100
user.name = "Alice"
def __init__(self, value):
result = a + b
self.is_active = True
Сообщения
Проверить
Показать подсказку

6. Заполнение профиля пользователя

id: 40090_task6

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

Нужно правильно расставить в пропуски предложенные варианты
class User:
    def __init__(self, login, role):
        self.login = input1S
        input2S.role = input3S

u = User("admin", "superuser")
print(u.login, u.role)
role
login
self
"admin"
User
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

7. Создание и изменение атрибута

id: 40090_task7

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

Расставьте строки в правильном порядке
point = Point()
point.x = 10
        self.x = 5
    def __init__(self):
print(point.x)  # Выведет 10
class Point:
print(point.x)  # Выведет 5
Сообщения
Проверить
Показать подсказку

8. Независимость объектов

id: 40090_task8

У нас есть класс Box, который хранит объем volume. Мы создали два ящика: b1 и b2. Сопоставьте код операции с результатом её выполнения, учитывая, что объекты независимы друг от друга.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
b1 = Box(10); print(b1.volume)
b2 = Box(5); print(b2.volume)
b1.volume = 20; print(b2.volume)
5 (значение второго не изменилось)
10 (начальное значение первого)
5 (начальное значение второго)
Сообщения
Проверить
Показать подсказку

9. Вычисления с атрибутами

id: 40090_task9

Изучите код класса Wallet (Кошелек). Мы создаем кошелек, тратим часть денег, а затем добавляем. Какая сумма окажется в атрибуте money в конце? Введите число.

Что должно получиться?
class Wallet:
    def __init__(self, amount):
        self.money = amount

my_wallet = Wallet(100)
my_wallet.money -= 30
my_wallet.money += 50
print(my_wallet.money)
Сообщения
Проверить
Показать подсказку

10. Динамическое создание атрибутов

id: 40090_task10

В Python атрибуты можно добавлять объекту "на лету", даже если их не было в __init__. Добавьте объекту obj новый атрибут new_attr со значением 99 уже ПОСЛЕ создания объекта.

Заполните пропуски
class Empty:
    pass

obj = Empty()
input1S.input2S = 99
print(obj.new_attr)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Python: запуск кода в браузере

id: 40090_compiler
🐍
Запустить тренажёр (Python)
НайтиКурс.Ру