Как оптимизировать модели данных с помощью наследования Pydantic?

Тенденции разработки программного обеспечения в 2022 году Программное обеспечение

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

Пример 1. Оптимизация моделей данных для платформы электронной коммерции

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

Например, подумайте о разработке платформы электронной коммерции. Мы можем определить базовую модель «Продукта» в Pydantic, которая включает общие атрибуты, такие как имя, описание и цена. По мере роста нашей платформы мы можем представить различные типы продуктов, такие как электроприборы, являющиеся электронными продуктами, и товары для одежды. Наследуя базовую модель «Продукт», мы можем легко включить дополнительные атрибуты для каждого типа, такие как Battery_life для электроники и размер для одежды.

Давайте практически реализуем конкретный пример этой концепции. Рассмотрим сценарий, в котором мы управляем библиотекой физических и электронных книг (электронных книг). Сначала создайте базовую модель под названием «BookBase» с обязательными полями, общими для всех типов книг, такими как название, автор и год публикации. Мы реализуем правила проверки в этой базовой модели, чтобы обеспечить целостность данных.

!pip install pydantic
from pydantic import BaseModel, field_validator

class BookBase(BaseModel):
title: str
author: str
publication_year: int

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

«BookBase» определяется как подкласс «BaseModel» из библиотеки Pydantic. Он включает в себя три атрибута: название книги, автора и год публикации.

Читайте также:  Как установить средство мониторинга Netdata на Ubuntu 20.04

Декоратор «@filed_validator» используется для применения функции проверки к атрибуту публикации_год. Это гарантирует, что год публикации останется в допустимом диапазоне.

@field_validator(«publication_year»)

def validate_publication_year(cls, year):

if year < 1000 or year > 2100:

raise ValueError(«Invalid publication year»)

return year

Сейчас идет создание специализированных моделей. На этом этапе мы определяем специализированные модели, которые наследуются от базовой модели. Эти специализированные модели могут иметь дополнительные атрибуты, уникальные для их типа данных. В этом примере создаются две специализированные модели: «PhysicalBook» и «ElectronicBook».

class PhysicalBook(BookBase):
pages: int
weight_grams: int

class ElectronicBook(BookBase):
file_format: str
file_size_mb: float

«PhysicalBook» и «ElectronicBook» определяются как подклассы «BookBase», наследуя от него все атрибуты и правила проверки. «PhysicalBook» включает в себя две дополнительные страницы атрибутов и вес книги. «Электронная книга» включает в себя два дополнительных атрибута: file_format и file_size_mb.

physical_book_data = {
«title»«The Catcher in the Rye»,
«author»«J.D. Salinger»,
«publication_year»1951,
«pages»224,
«weight_grams»350
}

electronic_book_data = {
«title»«1984»,
«author»«George Orwell»,
«publication_year»1949,
«file_format»«PDF»,
«file_size_mb»2.5
}

physical_book = PhysicalBook(**physical_book_data)
electronic_book = ElectronicBook(**electronic_book_data)

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

Физические_книжные_данные и электронные_книжные_данные — это словари, содержащие пары атрибутов и значений для каждой специализированной модели. Экземпляр «PhysicalBook» создается с использованием класса «PhysicalBook» и предоставленных данных. Экземпляр ElectronicBook создается с использованием класса ElectronicBook и предоставленных данных.

Полный код:

!pip install pydantic
from pydantic import BaseModel, field_validator

class BookBase(BaseModel):
title: str
author: str
publication_year: int

@field_validator(«publication_year»)
def validate_publication_year(cls, year):
if year < 1000 or year > 2100:
raise ValueError(«Invalid publication year»)
return year
class PhysicalBook(BookBase):
pages: int
weight_grams: int

class ElectronicBook(BookBase):
file_format: str
file_size_mb: float
physical_book_data = {
«title»«The Catcher in the Rye»,
«author»«J.D. Salinger»,
«publication_year»1951,
«pages»224,
«weight_grams»350
}

electronic_book_data = {
«title»«1984»,
«author»«George Orwell»,
«publication_year»1949,
«file_format»«PDF»,
«file_size_mb»2.5
}

physical_book = PhysicalBook(**physical_book_data)
electronic_book = ElectronicBook(**electronic_book_data)
print (physical_book)
print (electronic_book)

Выполнив следующие шаги, мы создаем точную иерархию мод

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

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

Пример 2. Оптимизация моделей данных для фитнес-приложения

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

Прежде всего, мы определяем базовую модель. Начните с определения базовой модели под названием «ExercisionBase», которая включает в себя атрибуты, общие для всех типов упражнений:

!pip install pydantic

from pydantic import BaseModel, PositiveInt, field_validator

class ExerciseBase(BaseModel):

name: str

duration_minutes: PositiveInt

В этом примере базовая модель включает такие атрибуты, как имя (название тренировки) и длительность_минут (продолжительность тренировки в минутах). Декоратор «@field_validator» гарантирует, что продолжительность является положительным целым числом.

@field_validator(«duration_minutes»)

def validate_duration_minutes(cls, value):

if value <= 0:

raise ValueError(«Duration must be a positive integer»)

return value

Затем создайте специализированные модели для разных типов упражнений, унаследовав их от «ExercisionBase».

Здесь «КардиоУпражнение» и «СиловоеУпражнение» наследуют атрибуты «ExercisionBase» и добавляют атрибуты, специфичные для каждого типа упражнения. Например, «Кардиоупражнение» включает атрибут интенсивности, а «Силовое упражнение» включает атрибуты подходов и повторений.

class CardioExercise(ExerciseBase):

intensity: str  # e.g, low, moderate, high

Чтобы использовать созданные нами специализированные модели, мы можем создать экземпляры специализированных моделей и использовать их в нашем фитнес-приложении:

class StrengthExercise(ExerciseBase):
sets: PositiveInt
repetitions: PositiveInt
cardio_data = {
«name»«Running»,
«duration_minutes»30,
«intensity»«moderate»
}

strength_data = {
«name»«Push-ups»,
«duration_minutes»15,
«sets»3,
«repetitions»15
}
cardio_workout = CardioExercise(**cardio_data)
strength_workout = StrengthExercise(**strength_data)

Cardio_workout и Strength_workout — это специализированные модели, созданные с использованием соответствующих данных в этом примере. Данные придерживаются атрибутов и правил проверки, определенных в базовой и технологической моделях.

!pip install pydantic
from pydantic import BaseModel, PositiveInt, field_validator

class ExerciseBase(BaseModel):
name: str
duration_minutes: PositiveInt

@field_validator(«duration_minutes»)
def validate_duration_minutes(cls, value):
if value <= 0:
raise ValueError(«Duration must be a positive integer»)
return value
class CardioExercise(ExerciseBase):
intensity: str  # e.g, low, moderate, high

class StrengthExercise(ExerciseBase):
sets: PositiveInt
repetitions: PositiveInt
cardio_data = {
«name»«Running»,
«duration_minutes»30,
«intensity»«moderate»
}

strength_data = {
«name»«Push-ups»,
«duration_minutes»15,
«sets»3,
«repetitions»15
}

cardio_workout = CardioExercise(**cardio_data)
strength_workout = StrengthExercise(**strength_data)
print (cardio_workout)
print (strength_workout)

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

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

Заключение

Использование Pydantic Inheritance для объединения моделей данных предлагает надежный подход к созданию организованных, адаптируемых и эффективных баз кода. Процесс разработки становится более систематическим за счет создания базовой базовой модели, а затем и специализированных моделей. Эта стратегия сокращает количество дополнительных моделей, обеспечивает согласованность данных и облегчает будущие модификации. Независимо от того, разрабатываете ли вы платформу электронной коммерции с различными типами продуктов или фитнес-приложение с различными категориями упражнений, Pydantic Inheritance упрощает управление данными и возможность повторного использования кода в соответствии со стандартами проверки.

Оцените статью
bestprogrammer.ru
Добавить комментарий