Загрузка...

Собрать объекты вместе

Цвет blue принадлежит ручке, а сумка её просто носит с собой, поэтому Bag не дочерний класс Pen. Сначала вы создаёте pen командой Pen("blue"), затем кладёте его в сумку через Bag(pen). Ни пакет не устанавливается, ни папка не появляется.

Ручка в сумке

python
class Pen:
    def __init__(self, color):
        self.color = color

class Bag:
    def __init__(self, pen):
        self.pen = pen

pen = Pen("blue")
bag = Bag(pen)
print(bag.pen.color)

Чтобы добраться до цвета, вы идёте от bag к pen, а потом к color: bag.pen.color. Собственного color у bag нет, он лишь отдаёт то, что хранит ручка. Выражение bag.pen — не вторая ручка, а та самая, которую вы создали, так что pen.color и bag.pen.color дают одно и то же blue. print выводит только это слово: перед ним нет badge, числа 4 тоже нет, и второй строки не будет.

Строка class Bag сумку ничем не наполняет, она лишь описывает заготовку. Наполняет её вызов Bag(pen). В этот момент срабатывает init сумки, а self — это и есть эта сумка.

📊 Что за чем стоит

Что вы пишете Что это
pen ручка, которую вы создали, в ней хранится blue
bag.pen та же самая ручка, но уже в сумке
bag.pen.color слово blue

Выражения bag.color в программе нет. Если бы вы попробовали его прочитать, выполнение остановилось бы с ошибкой AttributeError: на bag никакой color не хранится. None не выводится, и дальше программа не идёт. Вызова Bag("blue") в программе тоже нет. Одно слово — не ручка, цвета у него нет, поэтому чтение .color у него тоже закончилось бы остановкой с AttributeError. И не пишите class Bag(Pen): такая запись создаёт дочерний класс, а здесь ручка лежит внутри сумки.

Ручка внутри сумки

Вы создали pen, положили его в bag и прочитали blue через bag.pen.color. Следующая страница — про класс данных, то есть класс, который в основном хранит значения. На этой же странице мы лишь кладём ручку в сумку и читаем blue через сумку.

🧠 Проверьте Свои Знания

Готов к Началу

Проверьте Свои Знания

Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему

❓
6
Вопросы
🎯
70%
Для Прохождения
♾️
∞
Время
🔄
∞
Попытки

📝 Инструкции

  • Внимательно прочитайте каждый вопрос
  • Выберите лучший ответ на каждый вопрос
  • Вы можете пересдавать тест столько раз, сколько захотите
  • Ваш прогресс будет показан вверху