Реализация простого именованного кортежа

PythonBeginner
Практиковаться сейчас

Введение

В этом проекте вы научитесь реализовывать простой именованный кортеж в Python. Именованный кортеж — это структура данных, которая позволяет вам получать доступ к данным с использованием как позиционного индексирования, так и имен атрибутов, обеспечивая более интуитивный и читаемый способ работы с структурированными данными.

👀 Предварительный просмотр

## Вывод

🎯 Задачи

В этом проекте вы научитесь:

  • Создавать класс NamedTuple, наследующийся от встроенного класса tuple
  • Реализовывать методы __init__, __new__, __getitem__ и __repr__, чтобы достичь требуемой функциональности
  • Получать доступ к данным с использованием как позиционного индексирования, так и имен атрибутов
  • Представлять экземпляр NamedTuple в читаемом формате

🏆 Достижения

После завершения этого проекта вы сможете:

  • Разобраться в концепции именованных кортежей и их преимуществах
  • Реализовать простой класс именованного кортежа в Python
  • Использовать именованный кортеж для доступа и представления структурированных данных более интуитивным способом

Реализация класса NamedTuple

В этом шаге вы научитесь реализовывать класс NamedTuple, который позволяет получать доступ к данным с использованием как позиционного индексирования, так и имен атрибутов.

  1. Откройте файл namedtuple.py в вашем редакторе кода.
  2. Определите класс NamedTuple, который должен наследоваться от класса tuple.
  3. В методе __init__ примите два параметра: iterable (данные) и fields (именования для данных).
  4. Сохраните iterable и fields как экземплярные переменные self.data и self.fields соответственно.
  5. Используйте цикл for для перебора fields и установите каждое поле в качестве атрибута экземпляра NamedTuple, присвоив соответствующее значение из self.data.
  6. Реализуйте метод __new__, чтобы создать новый экземпляр класса NamedTuple. Этот метод должен вызвать метод __new__ класса tuple и вернуть новый экземпляр.
  7. Реализуйте метод __getitem__, чтобы позволить получать доступ к данным с использованием как позиционного индексирования, так и имен атрибутов. Если индекс является строкой, найдите индекс соответствующего поля в self.fields и верните значение из self.data.
  8. Реализуйте метод __repr__, чтобы вернуть строковое представление экземпляра NamedTuple в формате NamedTuple(x=1, y=2), где x и y — имена полей, а 1 и 2 — соответствующие значения.

Ваш завершенный класс NamedTuple должен выглядеть так:

class NamedTuple(tuple):
    def __init__(self, iterable, fields):
        self.data = iterable
        self.fields = tuple(fields)
        for i, attr in enumerate(self.fields):
            setattr(self, attr, self.data[i])

    def __new__(cls, iterable, fields):
        return super().__new__(cls, iterable)

    def __getitem__(self, index):
        if isinstance(index, str):
            index = self.fields.index(index)
        return self.data[index]

    def __repr__(self):
        return f"NamedTuple({', '.join(f'{field}={self[field]}' for field in self.fields)})"

Тестировать класс NamedTuple

В этом шаге вы будете тестировать класс NamedTuple, который вы реализовали на предыдущем шаге.

  1. В файле namedtuple.py добавьте следующий код в конец файла:
if __name__ == "__main__":
    ## Пример использования:
    testData = [1, 2]
    fields = ["x", "y"]
    t = NamedTuple(testData, fields)
    print(t)  ## Вывод: NamedTuple(x=1, y=2)
    print(t[1])  ## Вывод: 2
    print(t.x)  ## Вывод: 1
  1. Сохраните файл namedtuple.py.
  2. Откройте терминал или командную строку и перейдите в директорию, содержащую файл namedtuple.py.
  3. Запустите следующую команду для выполнения скрипта:
python3 namedtuple.py

Вы должны увидеть следующий вывод:

NamedTuple(x=1, y=2)
2
1

Это показывает, что класс NamedTuple работает как ожидается, позволяя вам получать доступ к данным с использованием как позиционного индексирования, так и имен атрибутов.

Поздравляем! Вы успешно реализовали простой именованный кортеж в Python.

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.

✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться