1

对于给定的数据类,如何获取有关字段类型的信息?

例子:

>>> from dataclasses import dataclass, fields
>>> import typing
>>> @dataclass
... class Foo:
...     bar: typing.List[int]

我可以通过 repr 获得字段信息:

>>> fields(Foo)
(Field(name='bar',type=typing.List[int],default=<dataclasses._MISSING_TYPE object at 0x7fef9aafd9b0>,default_factory=<dataclasses._MISSING_TYPE object at 0x7fef9aafd9b0>,init=True,repr=True,hash=None,compare=True,metadata=mappingproxy({}),_field_type=_FIELD),)

我可以拥有我的 bar 字段的类型 repr

>>> fields(Foo)[0].type
typing.List[int]

如何检索(作为 python 对象,而不是字符串 repr):

  • 类型 ( typing.List)
  • typing.List在( int)中键入项目类型

?

4

1 回答 1

3

type数据类字段的属性它不是字符串表示,它是一种类型。

蟒蛇 3.6:

>>> type(fields(Foo)[0].type)
<class 'typing.GenericMeta'>

蟒蛇 3.7:

>>> type(fields(Foo)[0].type)
<class 'typing._GenericAlias'>

在这种情况下,您可以使用属性检索内部类型__args__

>>> fields(Foo)[0].type.__args__
(<class 'int'>,)
于 2019-01-14T15:06:01.080 回答