Ввод словаря Python как Dict[key[T], value[K]], где T и K ограничены.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ввод словаря Python как Dict[key[T], value[K]], где T и K ограничены.

Сообщение Anonymous »

У меня есть словарь, который отслеживает два разных типа значений (скажем, город и деревня), используя два разных типа ключей (city_key и Village_key). Я хотел бы аннотировать этот словарь с помощью дженериков, чтобы, когда словарь получает ключ типа city_key, mypy/Pyright должен аннотировать возвращаемое значение как city. Аналогично, если вы попытаетесь присвоить значение города деревенскому ключу, mypy/pyright должен выдать ошибку.
Альтернативой является поддержка двух разных словарей, один для городов и один для деревень, но мне интересно, смогу ли я обойтись одним словарем.
Здесь есть такой же вопрос, как и мой, но он остался без ответа.
Некоторые псевдокоды, показывающие, чего я хочу на практике:
# two types of aliased keys
# ... edited to use NewType as per juanpa.arrivillaga comment

CityKey = NewType("CityKey", str)
VillageKey = NewType("VillageKey", str)

# two types of values, city and village
class City:...
class Village:...

# key generator that returns city or village key based on type of input
def generate_key(settlement: City | Village) -> CityKey | VillageKey: ...

# declare some keys & values
london = City("London")
london_key = generate_key(london)
mousehole = Village("Mousehole")
mousehole_key = generate_key(village)

# instantiate the dictionary
data: [????] = {}

# assign city to city key, and village to village key
data[london_key] = london
data[mousehole_key] = mousehole

# trying to assign village to city key should raise a type check error
data[london_key] = mousehole

# type of value accessed by village key should be village
reveal_type(data[mousehole_key]) # Type[Village]


Подробнее здесь: https://stackoverflow.com/questions/721 ... -restricte
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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