💀
Второй курс РПО
Разработка программных модулей
Разработка программных модулей
  • Модели разработки
  • Ошибки и отладка программ
  • Средства разработки алгоритмов
    • Основные принципы и стадии тестирования
  • Сложностные классы
  • Эмуляторы операционных систем
  • Сложность сортировки
  • Уровни тестирования
  • Задание №1
  • Регрессионное тестирование
  • Тестирование «белым ящиком»
  • Как делать оценку сложности?
  • Алгоритмы и сложность
  • Тестирование "белым ящиком" №2
  • Сложность алгоритмов
  • Тестирование "белым ящиком" №3
  • Тестирование "Чёрным ящиком»" №1
  • Тестирование "Черным ящиком" №2
  • Оценка сложности эвристических алгоритмов
  • Принципы ООП
  • Тестирование "Черным ящиком" №3
  • КТ - В3
  • Модульное тестирование
    • С кодами
  • Модульное тестирование
  • Абстрактные классы и интерфейсы в Python
  • Структуры в Python по аналогии с C++
    • Диалоги гениев
  • Делегаты в Python
    • Ещё более не смешные диалоги
  • Регулярные выражения в Python от простого к сложному
  • Python: Коллекции
  • Параметризованные классы (шаблоны)
  • Указатели и операции со списками в Python
  • Интеграционное тестирование
  • Работа с классами. Перегрузка методов
  • Определение операций в классе.
  • Создание наследованных классов
  • Интеграционное тестирование
  • Работа с объектами через интерфейсы
  • Использование стандартных интерфейсов
  • Работа с типом данных "Структура"
  • Коллекции. Параметризованные классы
  • Использование регулярных выражений
  • Операции со списками
  • Что такое паттерны проектирования?
  • Шпаргалка по шаблонам проектирования
    • [Habr] Шпаргалка
  • UML-диаграммы проектирования
  • Использование основных шаблонов.
  • Использование каких то там шаблонов
  • 15-я Практическая
  • 16-я Практическая
  • Graphviz Online
  • 17-я Практическая
  • Введение в теорию программирования: Объектно-ориентированный подход
  • Документирование софта и стандарты
  • C# Ввод и вывод
  • Оптимизация кода: просто о главном
  • Автоматизация разработки технической документации
  • Автоматизированное документирование и первичные данные
  • ADO.NET что это?
Powered by GitBook
On this page
  • Пример 1: Интерфейс __iter__ (делаем объект перебираемым в for)
  • Код
  • Объяснение
  • Тестирование
  • Пример 2: Интерфейс __len__ (делаем объект измеряемым len())
  • Код
  • Объяснение
  • Тестирование
  • Пример 3: Интерфейс __str__ (делаем объект понятным для print())
  • Код
  • Объяснение
  • Тестирование
  • Итоги

Использование стандартных интерфейсов

29.01.2025 - Практическая работа №9. Использование стандартных интерфейсов

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


Пример 1: Интерфейс __iter__ (делаем объект перебираемым в for)

Код

class Numbers:  # Класс чисел
    def __init__(self, max_num):
        self.max_num = max_num
        self.current = 0

    def __iter__(self):  # Позволяет объекту работать в `for`
        return self  

    def __next__(self):  # Определяет, что делать при `next()`
        if self.current >= self.max_num:
            raise StopIteration  
        self.current += 1
        return self.current

Объяснение

  • __iter__ делает объект итерируемым (его можно использовать в for).

  • __next__ говорит, что делать при каждом новом шаге.

  • Когда числа заканчиваются, вызывается StopIteration, и for понимает, что пора остановиться.

Тестирование

nums = Numbers(5)

for num in nums:
    print(num)  # Ожидаемый вывод: 1 2 3 4 5

Пример 2: Интерфейс __len__ (делаем объект измеряемым len())

Код

class Group:  # Класс группы студентов
    def __init__(self, students):
        self.students = students

    def __len__(self):  # Позволяет использовать `len()`
        return len(self.students)

Объяснение

  • __len__ позволяет узнать, сколько элементов в объекте.

  • Без него len() не будет работать с этим классом.

Тестирование

g = Group(["Иван", "Анна", "Петр"])
print(len(g))  # Ожидаем: 3

Пример 3: Интерфейс __str__ (делаем объект понятным для print())

Код

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):  # Определяет строковое представление объекта
        return f"{self.name}, возраст {self.age}"

Объяснение

  • __str__ делает объект понятным при выводе.

  • Без него print(obj) просто выведет "непонятную штуку" вроде <__main__.Person object at 0x00000123>.

Тестирование

p = Person("Иван", 30)
print(p)  # Ожидаем: "Иван, возраст 30"

Итоги

  1. __iter__ и __next__ позволяют использовать объект в цикле for.

  2. __len__ делает объект совместимым с len().

  3. __str__ делает print(obj) понятным.

PreviousРабота с объектами через интерфейсыNextРабота с типом данных "Структура"

Last updated 3 months ago