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

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

Тренажер по Python

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

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

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

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

Список тем

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

id: 40090_task1

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

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

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

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

id: 40090_task2

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

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

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

Потерянный self

id: 40090_task3

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

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

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

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 сек.
Показать подсказку

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

id: 40090_task5

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

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

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

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 сек.
Показать подсказку

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

id: 40090_task7

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

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

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

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 (начальное значение второго)
Сообщения
Проверить
Показать подсказку

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

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)
Сообщения
Проверить
Показать подсказку

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

id: 40090_task10

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

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

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