Хорошей практикой для использования Typing.union в абстрактном методе, когда детские классы используют только тип подмноPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Хорошей практикой для использования Typing.union в абстрактном методе, когда детские классы используют только тип подмно

Сообщение Anonymous »

Я работаю с абстрактными базовыми классами в Python, и мне интересно о лучших практиках, касающихся типирования методов - особенно при использовании союза в базовом классе и более узких типах в подклассах. But depending on the project, the subclasses will only accept one specific type:
  • Project A only accepts pd.DataFrame
  • Project B only accepts Dict[str, Any]
Итак, в моем базовом классе у меня в настоящее время есть: < /p>
from abc import ABC, abstractmethod
from typing import Union, Dict, Any
import pandas as pd

class ManifestExtract(ABC):

@abstractmethod
def extract_processed_samples_from_manifest(self, manifest: Union[Dict[str, Any], pd.DataFrame]) -> pd.DataFrame:
pass
< /code>
и в подклассах: < /p>
class ManifestExtractProjectA(ManifestExtract):

def extract_processed_samples_from_manifest(self, manifest: pd.DataFrame) -> pd.DataFrame:
raise NotImplementedError

class ManifestExtractProjectB(ManifestExtract):

def extract_processed_samples_from_manifest(self, manifest: Dict[str, Any]) -> pd.DataFrame:
raise NotImplementedError
< /code>
Тем не менее, такие инструменты, как Ruff, жаловатесь: < /p>
Method "extract_processed_samples_from_manifest" overrides class "ManifestExtract" in an incompatible manner
Parameter 2 type mismatch: base parameter is type "Dict[str, Any] | DataFrame", override parameter is type "DataFrame"
Type "Dict[str, Any] | DataFrame" is not assignable to type "DataFrame"
< /code>
использует Union в методе базового класса Правильный подход, когда классы детей обрабатывают только один тип каждый? Или лучше использовать какой -либо в базовом методе, чтобы избежать печати конфликтов? Что такое Pythonic или наиболее практичный способ разработки такого случая?

Подробнее здесь: https://stackoverflow.com/questions/796 ... ld-classes
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»