Введение
В этом проекте вы научитесь реализовывать простой именованный кортеж в Python. Именованный кортеж — это структура данных, которая позволяет вам получать доступ к данным с использованием как позиционного индексирования, так и имен атрибутов, обеспечивая более интуитивный и читаемый способ работы с структурированными данными.
👀 Предварительный просмотр
## Вывод
🎯 Задачи
В этом проекте вы научитесь:
- Создавать класс
NamedTuple, наследующийся от встроенного классаtuple - Реализовывать методы
__init__,__new__,__getitem__и__repr__, чтобы достичь требуемой функциональности - Получать доступ к данным с использованием как позиционного индексирования, так и имен атрибутов
- Представлять экземпляр
NamedTupleв читаемом формате
🏆 Достижения
После завершения этого проекта вы сможете:
- Разобраться в концепции именованных кортежей и их преимуществах
- Реализовать простой класс именованного кортежа в Python
- Использовать именованный кортеж для доступа и представления структурированных данных более интуитивным способом
Реализация класса NamedTuple
В этом шаге вы научитесь реализовывать класс NamedTuple, который позволяет получать доступ к данным с использованием как позиционного индексирования, так и имен атрибутов.
- Откройте файл
namedtuple.pyв вашем редакторе кода. - Определите класс
NamedTuple, который должен наследоваться от классаtuple. - В методе
__init__примите два параметра:iterable(данные) иfields(именования для данных). - Сохраните
iterableиfieldsкак экземплярные переменныеself.dataиself.fieldsсоответственно. - Используйте цикл
forдля перебораfieldsи установите каждое поле в качестве атрибута экземпляраNamedTuple, присвоив соответствующее значение изself.data. - Реализуйте метод
__new__, чтобы создать новый экземпляр классаNamedTuple. Этот метод должен вызвать метод__new__классаtupleи вернуть новый экземпляр. - Реализуйте метод
__getitem__, чтобы позволить получать доступ к данным с использованием как позиционного индексирования, так и имен атрибутов. Если индекс является строкой, найдите индекс соответствующего поля вself.fieldsи верните значение изself.data. - Реализуйте метод
__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, который вы реализовали на предыдущем шаге.
- В файле
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
- Сохраните файл
namedtuple.py. - Откройте терминал или командную строку и перейдите в директорию, содержащую файл
namedtuple.py. - Запустите следующую команду для выполнения скрипта:
python3 namedtuple.py
Вы должны увидеть следующий вывод:
NamedTuple(x=1, y=2)
2
1
Это показывает, что класс NamedTuple работает как ожидается, позволяя вам получать доступ к данным с использованием как позиционного индексирования, так и имен атрибутов.
Поздравляем! Вы успешно реализовали простой именованный кортеж в Python.
Резюме
Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.



