[英]How to declare python dataclass member field same as the dataclass type
[英]in python 3.8 how to test a field annotated as Literal in a dataclass is valid at run
給定以下示例:
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)
似乎不起作用。
其次,我怎樣才能從field.type
獲取list ['Y', 'N']
,以便我可以在運行時檢查該值並在fail = Example('invalid')
時引發錯誤
pydantic
,但你必須使用他們在數據類中的下降......
Literal
不是 python object 在運行時具有的正常類型,檢查 object 是否是Literal
沒有意義
您可以使用__annotations__
訪問 class 的注釋,從您的示例開始:
>>> Example.__annotations__['answer'].__args__
('Y', 'N')
from dataclasses import dataclass
from typing import Literal
from validated_dc import ValidatedDC
@dataclass
class Example(ValidatedDC):
answer: Literal['Y', 'N']
instance = Example('N')
assert instance.is_valid()
instance = Example('X')
assert not instance.is_valid()
為此,我創建了一個小型 Python 庫: https://github.com/tamuhey/dataclass_utils
該庫可應用於包含另一個數據類(嵌套數據類)和嵌套容器類型(如Tuple[List[Dict...
)的數據類。 當然,它可以在運行時測試Literal
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.