Собрать объекты вместе
Цвет blue принадлежит ручке, а сумка её просто носит с собой, поэтому Bag не дочерний класс Pen. Сначала вы создаёте pen командой Pen("blue"), затем кладёте его в сумку через Bag(pen). Ни пакет не устанавливается, ни папка не появляется.
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 через сумку.
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху