Моя идея — определить общий тип «Возможно», например:
Код: Выделить всё
# possibly.__init__.py
from typing import Generic, TypeVar
T = TypeVar("T")
class Possibly(Generic[T]):
pass
Код: Выделить всё
# possibly.plugin
from mypy.plugin import Plugin
class PossiblyPlugin(Plugin):
def get_type_analyze_hook(self, fullname: str):
if fullname != "possibly.Possibly":
return
return self._replace_possibly
def _replace_possibly(self, ctx):
arguments = ctx.type.args
breakpoint()
def plugin(version):
return PossiblyPlugin
Итак, я подумал о другой стратегии: я мог бы проверить TypedDict, посмотреть, какие поля отмечены как «Возможно», и установить .__optional_keys__ TypedDict экземпляр, чтобы сделать поле необязательным, и замените тип «Возможно» на mypy.types.UnionType(*arguments, None). Но я не нашел, какой метод в mypy.plugin.Plugin использовать, чтобы получить TypedDict в контекст.
Итак, я застрявший. Я впервые копаюсь во внутреннем устройстве mypy. Не могли бы вы подсказать мне, как достичь того, чего я хочу?
Подробнее здесь: https://stackoverflow.com/questions/779 ... otrequired