Добавьте атрибут класса в общую аннотациюPython

Программы на Python
Anonymous
Добавьте атрибут класса в общую аннотацию

Сообщение Anonymous »

Мне нужно добавить атрибуты из функции, но я не могу найти способ поддержки подсказок типов.
Проблема возникает при попытке представить тип возвращаемого значения с помощью Protocol Union.
from typing import Any, Protocol, TypeVar, Union

class JsonDictBase(Protocol): ...
class JsonDict(JsonDictBase, Protocol):
def __init__(self, **kwargs: Any) -> None: ...
key: str
value: int
other: Any

T = TypeVar('T', bound=JsonDictBase)

def build(cls: Union[T, type[JsonDictBase]]) -> Union[T, type[JsonDict]]:
...

@build
class MyClass:
name: str

cls = MyClass # type[MyClass] | type[JsonDict]

instance = MyClass(key='as') # fails

Я ожидаю, что функция сборки добавит атрибуты протокола JsonDict к введенному классу. Без использования наследования
@build
class MyClass:
name: str

# So python understands this
class MyClass:
name: str
def __init__(self, **kwargs: Any) -> None: ...
key: str
value: int
other: Any



Подробнее здесь: https://stackoverflow.com/questions/774 ... annotation

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