在python 3.8中,如何测试在数据类中标注为Literal的字段在运行时有效

问题描述 投票:0回答:1

给出以下示例:

from typing import Literal
from dataclasses import dataclass
@dataclass
Class Example:
    answer: Literal['Y', 'N']

x = Example('N')
field = fields(x)[0]

如何检查变量字段的类型为Literal? issubclass(field.type, Literal)似乎不起作用。

然后我该如何从list ['Y', 'N']中获取field.type,以便可以在运行时检查该值并在fail = Example('invalid')时引发错误

pydantic这样做,但是您必须使用他们在数据类中的放置权...

python runtime literals typechecking python-dataclasses
1个回答
0
投票

Literal不是python对象在运行时将具有的普通类型,检查对象是否为Literal]没有意义。

您可以使用__annotations__来访问课程的注释,下面是您的示例:

>>> Example.__annotations__['answer'].__args__
('Y', 'N')
© www.soinside.com 2019 - 2024. All rights reserved.