Рубрики
Без рубрики

Использование по имени TTUPLE для создания простых объектов данных в Python

Стандартная библиотека Python имеет удобную заводскую функцию коллекции под названием nameTuple, которую можно использовать … Tagged с Python.

Стандартная библиотека Python имеет удобную заводскую функцию коллекции под названием NALITTUPLE , который можно использовать для назначения имен для каждой позиции в кортеже.

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

from collections import namedtuple
Item = namedtuple("Item", ["name", "price", "quantity"])

Здесь мы впервые импортируем natingtuple из Коллекции Модуль в стандартной библиотеке, а затем создайте названный кортеж под названием Пункт со свойствами имя , цена и количество Анкет

Теперь мы можем создавать объекты типа Пункт То же самое Если Пункт были классом.

ketchup = Item(name="Ketchup", price=1.00, quantity=10000)

Мы также можем получить доступ к свойствам, как и следовало ожидать.

>>> ketchup.price
1.0
>>> ketchup.quantity
10000
>>> toilet_paper.name
'Ketchup'

Все свойства, которые мы определили для Пункт требуются, поэтому, если вы попытаетесь создать объект без количество Мы получим ошибку.

>>> mustard = Item(name="Mustard", price=1.00)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: __new__() missing 1 required positional argument: 'quantity'
>>>

Однако мы можем передать список значений по умолчанию при создании названного корпуса.

Item = namedtuple("Item", ["name", "price", "quantity", "is_dairy"], defaults=[False])

Значения по умолчанию применяются справа налево, поэтому здесь is_dairy по умолчанию Ложный Анкет Свойства со значениями по умолчанию, следовательно, должны быть определены после свойств с необходимыми значениями.

Поскольку кортежи неизменны, мы не можем изменить значения с помощью простого назначения.

>>> ketchup.price = 2.00
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: can't set attribute
>>>

Но названные кортежи предоставляют нам _replace Метод, который мы можем использовать для изменения значений.

>>> ketchup._replace(price=2.00)
Item(price=2.0, quantity=10000, name='Ketchup')
>>>

Для инициализации именованного корпуса мы также можем использовать _make Метод, который принимает в качестве ввода итерабильный. Это означает, что мы можем Инициализируйте наш названный кортеж из списка , стандартный кортеж или любой другой объект, который реализует Протокол итератора Python

>>> pepper = Item._make(["Pepper", 1.00, 1])
>>> pepper
Item(price='Pepper', quantity=1.0, name=1)
>>>

Документация Python имеет Отличный пример Использования _make Для инициализации именованных кортежей при чтении данных из базы данных SQLite или при чтении файла CSV.

Названные кортежи могут быть легко преобразовано в словарные и наоборот, используя _asdict Метод и Двойной звездный оператор

>>> ketchup._asdict()
{'name': 'Ketchup', 'price': 1.0, 'quantity': 10000, 'is_dairy': False}
>>>
>>> mustard_dict = {"name": "Mustard", "price": 1.00, "quantity": 10}
>>> mustard = Item(**mustard_dict)
>>> mustard
Item(price=1.0, quantity=10, name='Mustard')
>>>

Обратите внимание, что с Python 3.8, _asdict Возвращает регулярный дикта Потому что они теперь также упорядочены (с момента Python 3.7).

Мы можем получить доступ к имени поля и значения по умолчанию программно, используя _fields и _field_defaults характеристики.

>>> ketchup._fields
('name', 'price', 'quantity', 'is_dairy')
>>> ketchup._field_defaults
{'is_dairy': False}
>>>

Для получения дополнительной информации о названных кортежах вы должны проверить Документация Python.

Оригинал: “https://dev.to/juhanakristian/using-namedtuple-to-create-simple-data-objects-in-python-1j54”