- Project A only accepts pd.DataFrame
- Project B only accepts Dict[str, Any]
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