Получить информацию о типе полей класса данных - PullRequest
0 голосов
/ 15 ноября 2018

Для данного класса данных, как получить информацию о типе полей?

Пример:

>>> 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),)

У меня может быть тип repr моего поля bar

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

Как получить (как объекты python, а не как repr строки):

  • тип (typing.List)
  • тип элементов типа в typing.List (int)

?

1 Ответ

0 голосов
/ 14 января 2019

type свойство поля класса данных. Это не строковое представление, это тип.

Python 3.6:

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

Python 3.7:

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

В этом случае вы можете получить внутренний тип с помощью свойства __args__:

>>> fields(Foo)[0].type.__args__
(<class 'int'>,)
...