#python-3.x #python-typing
Вопрос:
У меня есть диктант, который сопоставляет классы с экземплярами этих классов. Как я могу ввести подсказку об этом в Python 3?
from typing import Dict
d : Dict[???, ???] = {}
d[int] = 0
d[str] = "hello world"
Комментарии:
1.
Dict[typing.Type, typing.Any]
? Я не уверен, что вы можете принудительно указать, что значение должно быть экземпляром ключа (если вы не расширитеdict
и не переопределите его__setitem__()
Ответ №1:
Я не уверен, что вы можете принудительно указать, что значение должно быть экземпляром ключа с помощью подсказок типа, но если вы открыты для расширения dict
класса, вы можете переопределить его __setitem__()
:
class TypedDict(dict):
def __setitem__(self, key: Type, value: Any):
if not isinstance(value, key):
raise TypeError("TypedDict values must be instances of their keys")
super().__setitem__(key, value)
Чтобы использовать это:
>>> td = TypedDict()
>>> td[int] = 0
{int: 0}
>>> td[float] = 1.0
{int: 0, float: 1.0}
>>> td[str] = -1
TypeError: TypedDict values must be instances of their keys
Комментарии:
1. Я не собираюсь применять типы во время выполнения, я просто хочу ввести подсказку, чтобы статические шашки могли улавливать ошибки, такие как «d[str] = 42».
2. @nullUser правильно, я не уверен, что вы можете это сделать, но я не самый опытный в подсказках типа. Я надеюсь, что кто-то, кто это сделает, сможет ответить.