【问题标题】:Check if a type is Union type in Python检查类型是否为 Python 中的联合类型
【发布时间】:2023-01-24 20:41:46
【问题描述】:

我定义了一个数据类:

import dataclasses

@dataclasses.dataclass
class MyClass:
    attr1: int | None
    attr2: str | None

我可以循环遍历我的属性类型:

for field in dataclasses.fields(MyClass):
    fieldname = field.name
    fieldtype = field.type 

但是我如何检查'str'类型是否在'fieldtype'中或获取联合类型中的类型列表?

【问题讨论】:

    标签: python python-typing


    【解决方案1】:

    您可以使用联合类型的 __args__ 属性。

    >>> import dataclasses
    >>> import types
    >>> 
    >>> @dataclasses.dataclass
    ... class MyClass:
    ...     attr1: int | None
    ...     attr2: str | None
    ... 
    >>> for field in dataclasses.fields(MyClass):
    ...     fieldname = field.name
    ...     fieldtype = field.type 
    ...     has_str_exists = False
    ...     if isinstance(fieldtype, types.UnionType):
    ...         fieldtype = fieldtype.__args__
    ...         has_str_exists = str in fieldtype
    ...     print(f"{fieldname=} {fieldtype=} {has_str_exists=}")
    ... 
    fieldname='attr1' fieldtype=(<class 'int'>, <class 'NoneType'>) has_str_exists=False
    fieldname='attr2' fieldtype=(<class 'str'>, <class 'NoneType'>) has_str_exists=True
    

    【讨论】:

    • 非常感谢!奇迹般有效
    猜你喜欢
    • 2021-10-26
    • 2019-05-26
    • 2020-08-04
    • 2018-04-24
    • 2021-12-08
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2020-02-24
    相关资源
    最近更新 更多