💀
Второй курс РПО
Разработка программных модулей
Разработка программных модулей
  • Модели разработки
  • Ошибки и отладка программ
  • Средства разработки алгоритмов
    • Основные принципы и стадии тестирования
  • Сложностные классы
  • Эмуляторы операционных систем
  • Сложность сортировки
  • Уровни тестирования
  • Задание №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: Очередь (Queue) — параметризованный класс
  • Код
  • Объяснение
  • Пример 2: Хранилище (Storage) с разными типами данных
  • Код
  • Объяснение
  • Тестирование
  • Пример 3: Пара параметризованных значений (Pair)
  • Код
  • Объяснение
  • Тестирование
  • Выводы

Коллекции. Параметризованные классы

31.01.2025 - Практическая работа №11. Коллекции. Параметризованные классы

Коллекции — это структуры данных, которые хранят несколько значений (например, списки, словари, множества). Параметризованные классы — это классы, которые работают с разными типами данных с использованием дженериков (Generic).


Пример 1: Очередь (Queue) — параметризованный класс

Код

from typing import Generic, TypeVar

T = TypeVar('T')  # Дженерик для хранения любого типа данных

class Queue(Generic[T]):  # Очередь для любых типов
    def __init__(self):
        self.items = []

    def enqueue(self, item: T):
        self.items.append(item)

    def dequeue(self) -> T:
        return self.items.pop(0) if self.items else None

Объяснение

  • T = TypeVar('T') — создаёт обобщённый тип.

  • Queue(Generic[T]) — позволяет классу работать с разными типами (int, str, float и т. д.).

  • enqueue(item: T) — добавляет элемент.

  • dequeue() -> T — удаляет первый элемент.

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

q = Queue[int]()  # Очередь для чисел
q.enqueue(10)
q.enqueue(20)
print(q.dequeue())  # Ожидаем: 10
print(q.dequeue())  # Ожидаем: 20
print(q.dequeue())  # Ожидаем: None

Пример 2: Хранилище (Storage) с разными типами данных

Код

from typing import Generic, TypeVar

T = TypeVar('T')

class Storage(Generic[T]):
    def __init__(self):
        self.data = []

    def add(self, item: T):
        self.data.append(item)

    def get_all(self):
        return self.data

Объяснение

  • Storage — параметризованный класс для хранения данных любого типа.

  • add(item: T) — добавляет элемент.

  • get_all() — возвращает все элементы.

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

s = Storage[str]()  # Хранилище для строк
s.add("Привет")
s.add("Мир")
print(s.get_all())  # Ожидаем: ['Привет', 'Мир']

Пример 3: Пара параметризованных значений (Pair)

Код

from typing import Generic, TypeVar

T1 = TypeVar('T1')
T2 = TypeVar('T2')

class Pair(Generic[T1, T2]):
    def __init__(self, first: T1, second: T2):
        self.first = first
        self.second = second

    def get_pair(self):
        return (self.first, self.second)

Объяснение

  • Pair — параметризованный класс для хранения двух значений разных типов.

  • get_pair() — возвращает кортеж из двух элементов.

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

p = Pair[str, int]("Возраст", 25)
print(p.get_pair())  # Ожидаем: ('Возраст', 25)

Выводы

  1. Queue — параметризованная очередь, работающая с любыми типами данных.

  2. Storage — универсальное хранилище элементов любого типа.

  3. Pair — удобный способ хранить две связанные переменные разных типов.

PreviousРабота с типом данных "Структура"NextИспользование регулярных выражений

Last updated 3 months ago