Введение в магические методы
Часть раздела Объектно-ориентированное программирование путешествия по Python на Coddy. Урок 33 из 64.
Магические методы (также называемые методами с двойным подчёркиванием) — это специальные методы с двойными подчёркиваниями в начале и в конце. Python вызывает их автоматически в ответ на определённые операции.
Вот пример класса с магическими методами:
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
def __str__(self):
return f"{self.title} by {self.author}"Метод __init__ вызывается автоматически, когда вы создаёте объект:
my_book = Book("Python Programming", "John Smith", 350)Метод __str__ вызывается автоматически, когда вы преобразуете объект в строку:
print(my_book) # Автоматически вызывает __str__
print(str(my_book)) # Также вызывает __str__Вывод:
Python Programming by John Smith
Python Programming by John SmithБез __str__ при выводе отображалось бы место объекта в памяти:
class SimpleBook:
def __init__(self, title):
self.title = title
simple = SimpleBook("Test Book")
print(simple) # <__main__.SimpleBook object at 0x...>Добавь ещё один магический метод для определения длины:
class Book:
def __init__(self, title, author, pages):
self.title = title
self.author = author
self.pages = pages
def __str__(self):
return f"{self.title} by {self.author}"
def __len__(self):
return self.pages
my_book = Book("Python Programming", "John Smith", 350)
print(len(my_book)) # Автоматически вызывает __len__Вывод:
350Ключевой момент: магические методы начинаются и заканчиваются двойными символами подчёркивания (__method__), и Python вызывает их автоматически. Они позволяют вашим объектам работать со встроенными функциями, такими как str(), len(), и операторами, делая ваши классы более соответствующими стилю Python и интуитивно понятными в использовании.
Задание
ЛегкоВ этом задании ты реализуешь класс Counter с магическими методами.
counter.py— файл, который нужно отредактировать; в нём есть комментарии TODO, которые помогут тебе выполнить реализациюdriver.py— содержит обширный набор тестов
Iреализуй класс Counter в файле counter.py и тесты в файле driver.py, следуя комментариям TODO. Класс должен поддерживать инициализацию с опциональными значениями, строковое представление и операции сложения.
Попробуйте сами
# TODO: Импортируйте класс Counter из counter.py
# Используйте формат: from counter import Counter
# Обработчик всех тестовых случаев
test_case = input()
if test_case == "init_test":
# TODO: Проверьте инициализацию со значением по умолчанию
# Создайте счётчик без аргументов и выведите его
# Ожидаемый вывод: "Count: 0"
pass
elif test_case == "init_with_value":
# TODO: Проверьте инициализацию с заданным значением
# Создайте счётчик с начальным значением 10 и выведите его
# Примечание: print() неявно вызывает __str__, но здесь мы проверяем __init__
# Ожидаемый вывод: "Count: 10"
pass
elif test_case == "addition":
# TODO: Проверьте операцию сложения
# Создайте счётчик со значением 3, прибавьте к нему 7 и выведите результат
# Ожидаемый вывод: "Count: 10"
pass
elif test_case == "chained_addition":
# TODO: Проверьте последовательные операции сложения
# Создайте счётчик со значением 1, прибавьте 2, затем прибавьте к результату 3 и выведите результат
# Ожидаемый вывод: "Count: 6"
pass
elif test_case == "negative_values":
# TODO: Проверьте работу с отрицательными значениями
# Создайте счётчик со значением -5 и выведите его
# Затем прибавьте к нему -3 и выведите результат
# Ожидаемые результаты: "Count: -5" и "Count: -8"
pass
elif test_case == "zero_value":
# TODO: Проверьте работу с нулевыми значениями
# Создайте счётчик со значением 0, прибавьте 0 и выведите результат
# Ожидаемый вывод: "Count: 0"
pass
elif test_case == "large_values":
# TODO: Проверьте работу с большими значениями
# Создайте счётчик со значением 1000000 и прибавьте 9000000
# Ожидаемый вывод: "Count: 10000000"
pass
elif test_case == "multiple_counters":
# TODO: Проверьте взаимодействие нескольких счётчиков
# Создайте counter1 со значением 5 и counter2 со значением 10
# Выведите оба счётчика
# Ожидаемые результаты: "Count: 5" и "Count: 10"
pass
elif test_case == "type_validation":
# TODO: Проверьте сложение значений разных типов
# Попробуйте прибавить число с плавающей точкой (2.5) к счётчику со значением 5
# Ожидаемый вывод: "Count: 7.5"
passВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Введение в ООПВнешние файлыКлассы и объектыПараметр selfМетодыАтрибутыМетод-конструктор (__init__)Повторение — простой калькулятор4Наследование
Основы наследованияФункция super()Переопределение методовМножественное наследованиеПорядок разрешения методовПовторение: иерархия сотрудников7Специальные методы
Введение в магические методыПерегрузка операторовМагические методы контейнеровПовторение — пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн «Одиночка»Паттерн «Фабрика»Паттерн «Наблюдатель»Паттерн «Стратегия»2Декораторы
Введение в декораторыДекоратор свойстваДекоратор статического методаДекоратор метода класса5Полиморфизм
Переопределение методов: повторениеУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовПовторение — калькулятор фигур8Продвинутые концепции ООП
Композиция и наследованиеМиксиныСтатические методы и методы классаДекораторы классовМенеджеры контекста11Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»3Свойства классов
Переменные экземпляра и классаДекораторы свойствПриватные атрибутыПовторение — менеджер банковского счёта6Инкапсуляция
Публичные, защищённые и приватные членыМодификаторы доступаСокрытие информацииПродвинутые декораторы свойствПовторение — система учёта студентов12Проект: Система управления библиотекой
Обзор проектаКлассы книг и пользователейСистема выдачи книгФункция поискаИнтерфейс администратораТестирование и интеграцияПотренируйтесь самостоятельно: Онлайн-компилятор Python