有没有一种方法可以在Python中创建参数化类型别名?

时间:2020-05-05 17:24:11

标签: python python-3.x typing

所以我有以下代码:

@dataclass
class User:
    name: str
    age: int

User类应该对应于数据库中某个表,其中name字段是主键。我想要以下类型提示:

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

因此,我可以在代码中进一步检查字段的类型提示以查找主键的名称。我希望Key [T]解析为T,这样正常的类型提示将起作用并检查所提供的类型确实是str。 我在打字模块的文档中进行了一些搜索,找不到任何合适的方法。

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,您可能正在寻找typing.NewType

Key = NewType("Key", str)

@dataclass
class User:
    name: Key
    age: int

编辑:您正在寻找Generic NewType。这是mypy回购上的open feature request

答案 1 :(得分:0)

如果您需要验证,则可以:

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