Как статически проверить с помощью mypy, что в словаре есть ключи для всех параметров типа Union?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как статически проверить с помощью mypy, что в словаре есть ключи для всех параметров типа Union?

Сообщение Anonymous »

У меня есть тип объединения CouldOption, состоящий из n классов данных, и я хочу создать словарь, ключами которого являются экземпляры этих классов. Мне нужно статически проверить с помощью mypy, что словарь содержит ключ для каждой опции в Union. Вот мой текущий код:

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

from dataclasses import dataclass
from typing import Union

@dataclass
class Option1:
def __hash__(self):   #don t focus too much on this method, A dictionary need a hashable key. that s all
return hash(type(self))

@dataclass
class Option2:
def __hash__(self):
return hash(type(self))

@dataclass
class Option3:
def __hash__(self):
return hash(type(self))

PossibleOption = Union[Option1, Option2, Option3]

# I want to create a dictionary like this:
a = {Option1(): "a",Option2(): "bb",Option3(): "cc"}
# print(a[Option2()]) prints "bb" for example
Я знаю, что могу попросить пользователя предоставить функцию, принимающую в качестве параметра MaybeOption и возвращающую такое значение:

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

 def equivalent_to_dictionary(po: PossibleOption) -> str:
match po:
case Option1():
return "aa"
case Option2():
return "bb"
case Option3():
return "cc"
и mypy может проверить, охвачен ли каждый параметр
Но я хочу, чтобы пользователю было проще...
Есть ли способ статически проверить с помощью mypy, что каждый параметр (Option1, Option2, Option3 в данном конкретном случае) присутствует в качестве ключа в словаре?

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

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

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

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

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

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

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