Загрузка...

Особые методы

Особый метод позволяет самому бейджу отвечать на print и len. В первой программе print(guest) выводит на экран badge mira, потому что запускается str. Вызов guest.str() вы не пишете: достаточно print(guest). Имя mira хранится в Badge, никакой пакет не устанавливается и никакая папка не создаётся. Когда вы пишете Badge("mira"), срабатывает init, а self здесь — этот самый бейдж. str возвращает слова, а на экран их выводит print. Между badge и mira стоит один пробел.

print запускает __str__

python
class Badge:
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return "badge " + self.name

guest = Badge("mira")
print(guest)

На экране одна строка: badge mira. Хранится имя mira, а слово badge спереди добавляет str. Строку выводит print. Не будь в программе print, экран остался бы пустым: вернуть слова — не значит вывести их. Строки guest.str() в программе тоже нет, для запуска хватает print(guest). Бейдж без str не напишет badge mira: вместо этого выйдет строка с названием класса и адресом в памяти. None при этом не пишется.

len запускает __len__

python
class Badge:
    def __init__(self, name):
        self.name = name
    def __len__(self):
        return len(self.name)

guest = Badge("mira")
print(len(guest))

Вторая программа отдельная. На её экране целое число 4, а не badge mira и не mira. В ней определён len, он возвращает len(self.name), и print(len(guest)) пишет 4. В слове mira четыре буквы: m, i, r, a. Поэтому и получается 4, без десятичной точки, а в хранимом имени пробела нет. Метод str во второй программе не определён, так что badge mira она не пишет. Если бы len не было, len(guest) остановил бы программу. Эта остановка называется TypeError. None не пишется, дальше программа не идёт. Такой строки в программе нет.

📊 Что написано и что выведено

Что вы пишете Что на экране
print(guest) badge mira
print(len(guest)) 4
len(guest) без __len__ программа останавливается

Следующая страница поместит один объект внутрь другого. Здесь же показаны только два особых метода на одном бейдже по имени mira.

Что ответил бейдж

print(guest) пишет badge mira, потому что запускается str. print(len(guest)) пишет 4, потому что запускается len: именно столько букв в слове mira. Скобки после этих особых имён отдельно не ставят. Следующая страница поместит один объект внутрь другого.

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

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

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

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

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

📝 Инструкции

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