Как использовать вычисляемые поля Pydantic?

Выделение не влияет на производительность кода, но облегчает жизнь разработчикам Программирование и разработка

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

Пример. Создание модели продукта с вычисляемыми полями с помощью Pydantic

В этом примере мы рассмотрим, как создать модель «Продукт», включающую вычисляемые поля. В коде подчеркивается практическая реализация функций Pydantic для управления структурированными данными, проверки входных данных и выполнения динамических вычислений в модели.

Если вы еще не установили Pydantic, вам необходимо установить его с помощью команды pip:Загрузка рекламы

pip install pydantic

После установки Pydantic мы можем приступить к написанию программы.

Код начинается с импорта необходимых библиотек.

from pydantic import BaseModel, Field

В этой строке кода мы импортируем необходимые классы из модуля Pydantic. «BaseModel» — это базовый класс для моделей Pydantic, а «Field» используется для определения полей и их метаданных в модели.

После импорта модулей мы определим класс модели Pydantic.

class Product(BaseModel):

cost: float = Field(, description=«The actual cost of the product»)

discount: float = Field(, description=«The discount percentage»)

Этот фрагмент кода определяет класс Python с именем «Продукт». Этот класс является подклассом BaseModel, предоставляемого Pydantic. Внутри этого класса мы указываем два поля. Первое поле, которое здесь определяется, — это поле «стоимость». Он представляет фактическую стоимость продукта и, как ожидается, будет числом с плавающей запятой (float).

Часть «float = Field(…)» указывает, что поле имеет тип float. Функция «Поле» используется для определения дополнительных метаданных для поля. «…» Это заполнитель, указывающий, что поле является обязательным. Мы должны указать фактическое значение при создании экземпляра класса «Продукт». «Description=»Фактическая стоимость продукта«» описывает назначение поля, которое может быть полезно для целей документации.

Подобно полю «стоимость», «скидка» — это еще одно поле класса «Товар». Он представляет собой процент скидки на продукт и также должен быть числом с плавающей запятой (float). Метаданные и описание определяются так же, как мы описывали поле «стоимость».

Теперь мы рассчитываем окончательную цену продукта, используя вычисленное свойство.

@property

def discounted_price(self) —> float:

return (1 — self.discount / 100) * self.cost

В этих строках кода мы определяем вычисляемое свойство с именем «discounted_price» в классе «Product». Мы используем декоратор «@property». В Python декоратор «@property» похож на специальный тег, который вы помещаете в метод. Это помогает вам создавать методы, которые вы можете использовать так же, как обычные атрибуты.

«. «-> float» указывает, что метод возвращает значение с плавающей запятой. «Возврат (1 — self.discount / 100) * self.cost» содержит фактический расчет цены со скидкой. Он рассчитывает цену со скидкой путем вычитания процента скидки из 1, а затем умножения результата на первоначальный атрибут стоимости продукта. Результат этого вычисления предоставляется в виде значения атрибута «discounted_price».

Двигаясь дальше, чтобы настроить поведение и метаданные модели pydantic, мы используем класс «config» в этой программе. Это помогает нам обрабатывать дополнительные поля, округлять значения с плавающей запятой и предоставлять четкие примеры для документации и понимания при использовании модели в API.

class Config:

extra = «allow»

json_encoders = {

floatlambda v: round(v, 2)

}

schema_extra = {

«example»{

«cost»250,

«discount»35

}

}

В этом фрагменте кода вы определяете вложенный класс «Config» внутри класса «Product».

В этом классе строка «extra = „allow“» устанавливает дополнительный атрибут в значение «allow». Эта конфигурация позволяет включать любые дополнительные поля, которые явно не определены в модели, без возникновения ошибки во время проверки. «json_encoders = {…}» определяет словарь с именем «json_encoders», который сопоставляет типы Python с функциями. Это используется для управления сериализацией данных в JSON. В этом случае мы сопоставляем тип float с лямбда-функцией, которая округляет значения с плавающей запятой до двух десятичных знаков при их сериализации в JSON. Затем мы определяем словарь «schema_extra», используя строку «schema_extra = {…}», которая используется для предоставления дополнительной информации для генерации схемы OpenAPI. В этом случае мы предоставляем пример структуры данных, демонстрирующий, как должны выглядеть данные.

Теперь мы создаем экземпляр модели «Продукт», позволяющий хранить определенные данные и манипулировать ими в соответствии со структурой и поведением модели.

product_data = {

«cost»250,

«discount»35

}

product = Product(**product_data)

В этом фрагменте кода мы создаем словарь «product_data», который содержит данные для создания экземпляра «Продукт». Этот словарь содержит две пары ключ-значение: «стоимость» со значением 250 и «скидка» со значением 35.

Затем мы пишем строку «product = Product(**product_data)», чтобы создать экземпляр модели «Product», используя синтаксис распаковки (**). Словарь «product_data» распаковывается, и его содержимое передается в качестве аргументов ключевого слова конструктору класса «Продукт». Это означает, что атрибуту «стоимость» экземпляра присвоено значение 250, а атрибуту «скидка» — 35.

Наконец, чтобы отобразить фактическую стоимость и цену продукта со скидкой, используя значения, хранящиеся в экземпляре «product», который мы создали ранее, мы используем метод «print()».

print(«Actual Price of the product:», product.cost)

print(«Discounted Price of the pr:», product.discounted_price)

Here is the complete code for observation:

from pydantic import BaseModel, Field

class Product(BaseModel):

cost: float = Field(, description=«The actual cost of the product»)

discount: float = Field(, description=«The discount percentage»)

@property

def discounted_price(self) —> float:

return (1 — self.discount / 100) * self.cost

class Config:

extra = «allow»

json_encoders = {

floatlambda v: round(v, 2)

}

schema_extra = {

«example»{

«cost»250,

«discount»35

}

}

product_data = {

«cost»250,

«discount»35

}

Выполнение этого кода дает нам следующий результат:

Выполнение этого кода дает нам следующий резу

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

Заключение

Мы изучили практическую реализацию использования вычислительных полей Pydantic. Мы создали пример, чтобы продемонстрировать возможности Pydantic по управлению структурированными данными с помощью динамических вычислений, определив модель «Продукт» с такими ключевыми атрибутами, как «стоимость» и «скидка», и применив рассчитанное свойство «discounted_price». Кроме того, настройки класса «Config» позволили нам настроить сериализацию, документирование и проверку данных.

Читайте также:  Программа JavaScript для печати четных чисел в массиве
Оцените статью
bestprogrammer.ru
Добавить комментарий