Курс 3.4 · Раздел 04 · Урок 4.4

Наследование и dataclasses

Разберём тему на понятных примерах и закрепим её практикой.

Ученик и ИИ-наставник изучают тему «Наследование и dataclasses»
4.4 — Наследование и dataclasses

Материал урока

Теперь давай рассмотрим, как наследование работает с использованием модуля dataclasses, когда мы создаем различные ИИ-компоненты. Представь, что каждый класс описывает отдельный ИИ-модуль, а декоратор @dataclass помогает автоматически генерировать конструкторы, позволяющие задавать параметры для этих модулей.

Наследование и dataclasses в контексте ИИ

Когда мы применяем декоратор @dataclass к классу ИИ, он автоматически создает методы, такие как \_\_init\_\_, и просматривает все родительские классы для сбора атрибутов. Это похоже на то, как ИИ-система наследует базовые параметры и поведение от других модулей.

Посмотрим на пример. Мы создадим базовый класс ИИ-компонента, представляющего простую ИИ-систему, и наследуем от него другой ИИ-класс с дополнительными параметрами.

from dataclasses import dataclass, field


@dataclass
class BaseAI:
    name: str

    version: str = '1.0'
    tasks: list[str] = field(default_factory=list)


@dataclass
class AdvancedAI(BaseAI):
    capabilities: list[str] = field(default_factory=list)


# Создаем экземпляр AdvancedAI
ai = AdvancedAI(name='AI-Assistant')
print(ai)

Результат покажет, что ИИ наследует атрибуты базового класса, и мы можем переопределить или добавить новые атрибуты:

# Output:
# AdvancedAI(name='AI-Assistant', version='1.0', tasks=[], capabilities=[])

Как работает dataclass в ИИ

Теперь объясним, как dataclass обрабатывает атрибуты при наследовании. Например, если у нас есть ИИ-компонент BaseAI с предопределенными параметрами, то наследующий класс может переопределить эти параметры и добавить новые.

Когда мы создаем экземпляр AdvancedAI, его параметры, такие как имя и возможности (capabilities), будут установлены на основе значений в производном классе. Однако, если значение не было указано в производном классе, оно будет взято из базового.

Пример с датаклассами и ИИ

Представим, что у нас есть базовый ИИ-компонент, который отвечает за анализ данных. Мы создадим производный класс, представляющий более продвинутую ИИ-систему, которая может выполнять дополнительные задачи.

@dataclass
class DataAnalyzerAI:
    model: str

    version: str = '1.0'
    data_sources: list[str] = field(default_factory=list)


@dataclass
class AdvancedDataAnalyzerAI(DataAnalyzerAI):
    new_features: list[str] = field(default_factory=list)


# Создаем экземпляр AdvancedDataAnalyzerAI
ai_component = AdvancedDataAnalyzerAI(model='AdvancedModel')
print(ai_component)

Вывод:

# Output:
# AdvancedDataAnalyzerAI(model='AdvancedModel', version='1.0', data_sources=[], new_features=[])

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