У меня есть функция, у которой есть параметр, который может принимать определенные типы и тип Any (сам класс), который в моем случае также является значением по умолчанию. Вот простой пример:
Код: Выделить всё
def foo(type: type[int] | type[str] | type[Any] = Any) -> Any:
...
Это вызывает множество проблем при проверке типов:
- Теперь разрешен любой тип класса, а не только сам класс Any, что противоречит цели проверки типа.
- Моя программа проверки типов (Pylance) даже видит это в качестве ошибки утверждается, что тип "type[typing.Any]" не может быть назначен объявленному типу "builtins.type[Any]
В качестве второго подхода я просмотрел код и нашел этот код, который определяет Any (Python 3.13):
Код: Выделить всё
class _AnyMeta(type):
def __instancecheck__(self, obj):
if self is Any:
raise TypeError("typing.Any cannot be used with isinstance()")
return super().__instancecheck__(obj)
def __repr__(self):
if self is Any:
return "typing.Any"
return super().__repr__() # respect to subclasses
class Any(metaclass=_AnyMeta):
"""Special type indicating an unconstrained type.
- Any is compatible with every type.
- Any assumed to have all methods.
- All values assumed to be instances of Any.
Note that all the above statements are true from the point of view of
static type checkers. At runtime, Any should not be used with instance
checks.
"""
def __new__(cls, *args, **kwargs):
if cls is Any:
raise TypeError("Any cannot be instantiated")
return super().__new__(cls)
Код: Выделить всё
def foo(type: type[int] | type[str] | _AnyMeta = Any) -> Any:
...
Резюме
Поэтому я не мог понять, как набирать подсказку в самом классе Any. Я также не смог найти в Интернете подобных вопросов или ответов, которые могли бы ответить на этот вопрос.
Мне интересно, возможно ли это вообще в текущей версии Python (3.13), но я надеюсь, что кто-нибудь знает, как это сделать.
Технически я мог бы использовать какой-то дозорный объект вместо типа Any, но мне все еще интересно, возможно ли это. Если бы это было возможно, это также было бы более элегантным решением моей проблемы.
Подробнее здесь: https://stackoverflow.com/questions/796 ... any-itself
Мобильная версия