На данный момент в Python нет прямого способа аннотировать типы аргументов, которые зависят от внутреннего состояния объекта или определяются во время исполнения программы.
Как вариант, можно закостылить так:
from dataclasses import dataclass
from typing import Any, Literal, TypeAlias, Self
@dataclass()
class BaseConfig:
ITEM: TypeAlias = Literal["item1", "item2"]
class MyClass:
def __init__(self, config: BaseConfig = BaseConfig) -> None:
self.config = config
def meth(self, item: Any) -> Self:
if item not in self.config.ITEM:
raise ValueError(f"Invalid value {item} for item. Expected one of {self.config.ITEM}.")
...