TypeError: недопустимая аннотация для значения. типирование.Тип[bool] не является классомPython

Программы на Python
Ответить
Anonymous
 TypeError: недопустимая аннотация для значения. типирование.Тип[bool] не является классом

Сообщение Anonymous »

В Python 3.8 был создан новый декоратор для создания полиморфных функций @singledispatch, который перенаправляет Python на правильную реализацию вашего метода в зависимости от предоставленных подсказок типа.

Код: Выделить всё

from datetime import datetime
from functools import singledispatch
from random import choice, randint
from typing import NoReturn, Type

@singledispatch
def load_value(value) -> NoReturn:
raise NotImplementedError(f'Unsupported type: {value}')

@load_value.register
def _(value: Type[bool]) -> bool:
return choice([False, True])

@load_value.register
def _(value: Type[int]) -> int:
return randint(0, 1000)

@load_value.register
def _(value: Type[datetime]) -> datetime:
return datetime.now()

print(load_value(bool))
print(load_value(int))
print(load_value(datetime))
Однако я, похоже, не могу использовать типы в качестве аргументов; пожалуйста, не могли бы вы сказать мне, что не так с моим примером? Как мне аннотировать параметр, чтобы он распознавался как тип?

Код: Выделить всё

$ python ./register.py
Traceback (most recent call last):
File "./register.py", line 40, in 
def _(value: Type[bool]) -> bool:
File "/app/pyenv/versions/3.8.11/lib/python3.8/functools.py", line 860, in register
raise TypeError(
TypeError: Invalid annotation for 'value'. typing.Type[bool] is not a class.
Соответствующая функция должна вызываться в зависимости от класса, переданного в качестве аргумента.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ot-a-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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