СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Методическая разработка «Магические методы __str__ и __repr__ в Python. Задачи»

Категория: Информатика

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«Методическая разработка «Магические методы __str__ и __repr__ в Python. Задачи»»

МУНИЦИПАЛЬНОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ОБРАЗОВАНИЯ

«ЦЕНТР ДЕТСКОГО ТЕХНИЧЕСКОГО ТВОРЧЕСТВА»













Методическая разработка

«Магические методы __str__ и __repr__ в Python. Задачи»

к дополнительной общеобразовательной

общеразвивающей программе

технической направленности

«Программирование на Python»



Возраст детей: 10-17 лет









Автор: Костычев Вадим Александрович










г. Заречный Пензенской области

2025 г.

Данный материал предназначен для преподавателей информатики, программирования и студентов (учащихся), изучающих язык программирования Python. Он может быть использован как на лекциях, так и при проведении практических занятий или самостоятельной работе.


Цель: формирование у обучающихся навыков проектирования пользовательских классов в языке Python посредством реализации магических методов __str__ и __repr__, обеспечивающих корректное строковое представление объектов для взаимодействия с пользователем и отладки программы.


Задачи:

  1. Понять, зачем нужны __str__ и __repr__;

  2. Научиться писать эти методы;

  3. Уметь отличать, когда какой метод используется;

  4. Сделать свои классы удобными и «говорящими».


Задача 1. Робот, который умеет представляться


Создайте класс Robot, у которого есть имя. Сделайте так, чтобы:

  • print(robot) выводил: "Hello! I'm robot Bob."

  • Если просто написать robot в консоли Python, появилось: "Robot(name='Bob')"


Решение:


class Robot:

def __init__(self, name):

self.name = name


def __str__(self):

return f"Hello! I'm robot {self.name}."


def __repr__(self):

return f"Robot(name='{self.name}')"


r = Robot("Bob")
print(r) # Hello! I'm robot Bob.
print([r]) # [Robot(name='Bob')]


Задача 2. Питомец в компьютерной игре


Создайте класс Pet с именем и возрастом.

  • print(pet) должен выводить: "Dog named Barboss, 3 years old"

  • В списке питомцев должно отображаться: [Pet(name='Barboss', age=3)]


Решение:

class Pet:

def __init__(self, name, age):

self.name = name

self.age = age


def __str__(self):

return f"Dog named {self.name}, {self.age} years old"


def __repr__(self):

return f"Pet(name='{self.name}', age={self.age})"


p = Pet("Barboss", 3)

print(p) # Dog named Barboss, 3 years old

print([p]) # [Pet(name='Barboss', age=3)]


Задача 3. Найди и исправь ошибку!


Вот неправильный код. Найдите ошибку и исправьте, чтобы repr() работал правильно:


class Book:

def __init__(self, title):

self.title = title


def __repr__(self):

return f"Book({self.title})"


Проблема:
Если название книги — "Harry Potter", то repr выведет:
Book(Harry Potter) — но это не настоящий код Python, потому что нет кавычек вокруг названия!


Правильное решение:


def __repr__(self):

return f"Book(title='{self.title}')"


Или ещё лучше — используем встроенную функцию repr() для строки:


def __repr__(self):

return f"Book(title={repr(self.title)})"


Теперь результат можно скопировать и вставить в код — и он заработает без ошибок!


Задача 4. Мини-игра: Герой и монстр

Условие:
Создайте два класса: Hero и Monster.

  • У героя: имя и здоровье (health).

  • У монстра: имя и сила (power).

Сделайте так, чтобы:

  • print(hero) → "Hero Alice (health: 100)"

  • print(monster) → "Monster Dragon (power: 50)"

  • В списке: [Hero(name='Alice', health=100), Monster(name='Dragon', power=50)]


class Hero:

def __init__(self, name, health):

self.name = name

self.health = health


def __str__(self):

return f"Hero {self.name} (health: {self.health})"


def __repr__(self):

return f"Hero(name='{self.name}', health={self.health})"



class Monster:

def __init__(self, name, power):

self.name = name

self.power = power


def __str__(self):

return f"Monster {self.name} (power: {self.power})"


def __repr__(self):

return f"Monster(name='{self.name}', power={self.power})"


hero = Hero("Alice", 100)

monster = Monster("Dragon", 50)


print(hero) # Hero Alice (health: 100)

print(monster) # Monster Dragon (power: 50)

print([hero, monster]) # [Hero(name='Alice', health=100), Monster(name='Dragon', power=50)]


Полезные советы


  1. Всегда пишите __repr__ — даже если не используете __str__. Без него отладка будет сложной.

  2. Ставьте кавычки вокруг строк в __repr__! Иначе Python не поймёт, что это строка.

  3. Представьте, что объект — это персонаж:

    • __str__ — как он скажет о себе на сцене,

    • __repr__ — как о нём напишут в техническом паспорте.

  4. Проверяйте в консоли: просто напишите имя объекта и нажмите Enter — вы увидите __repr__.


Задача для самостоятельного решения.


Проверьте себя, напишите, что выведет данный код.


class Fruit:

def __init__(self, name):

self.name = name


def __str__(self):

return f"Delicious {self.name}"


def __repr__(self):

return f"Fruit(name='{self.name}')"


f = Fruit("orange")

print(f)

print([f])


Заключение


Магические методы __str__ и __repr__ играют ключевую роль в создании понятных, удобных и профессионально оформленных классов в Python. Их правильное использование повышает читаемость кода, упрощает отладку и делает взаимодействие с объектами интуитивно ясным как для разработчика, так и для конечного пользователя. Освоение этих методов — важный шаг на пути к написанию качественного кода.