Есть ли способ создать псевдоним параметризованного типа в Python? - PullRequest
2 голосов
/ 05 мая 2020

Итак, у меня есть следующий код:

@dataclass
class User:
    name: str
    age: int

Класс User должен соответствовать некоторой таблице в БД, где поле имени является первичным ключом. Я хотел бы иметь следующие подсказки типов:

@dataclass
class User:
    name: Key[str]
    age: int

Так что я могу дальше в своем коде проверить подсказки типов полей, чтобы найти имя первичного ключа. Я бы хотел, чтобы Key [T] преобразовался в T, чтобы нормальные подсказки типов работали и проверяли, действительно ли предоставленный тип является str. Я немного искал в документации модуля набора текста и не нашел подходящего способа сделать это.

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Если вам нужно подтвердить, то вы можете:

from dataclasses import dataclass

from validated_dc import ValidatedDC


@dataclass
class User(ValidatedDC):
    name: str
    age: int


input_data = {
    'name': 123,  # <-- not str!
    'age': 30
}

user = User(**input_data)

assert not user.is_valid()
assert user.get_errors().get('name')  # <-- There is an error in the name field

https://github.com/EvgeniyBurdin/validated_dc

0 голосов
/ 05 мая 2020

Возможно, вы ищете typing.NewType, если я правильно понял ваш вопрос:

Key = NewType("Key", str)

@dataclass
class User:
    name: Key
    age: int

EDIT: вы ищете Generi c NewType. Это запрос открытой функции в репозитории mypy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...