检查Python中的类型是否为联合类型

lnvxswe2  于 2023-01-24  发布在  Python
关注(0)|答案(1)|浏览(164)

我定义了一个数据类:

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

我可以使用以下语句循环遍历属性的类型:

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

但是如何检查类型“str”是否在“fieldtype”中,或者如何获取联合类型中的类型列表?

jjhzyzn0

jjhzyzn01#

可以使用联合类型的__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

相关问题