簡體   English   中英

在 python 3.8 中,如何測試數據類中注釋為 Literal 的字段在運行時有效

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM