с typing.get_type_hints () я могу получить Hints типа в качестве выдумки, но как проверить, если поля - это поля, если поля - это поля). Еще лучше, если бы я мог получить тип любого необязательного поля, независимо от того, не является ли это необязательно [str] , необязательный [int] , необязательный [class_x] и т. Д.
Пример кода
Код: Выделить всё
from typing import Optional, get_type_hints
from enum import IntEnum, Enum
class TestEnum(IntEnum):
foo = 1
bar = 2
class Foo():
opt_enum : TestEnum | None = None
types = get_type_hints(Foo)['opt_enum']
(ipython)
Код: Выделить всё
In [4]: Optional[TestEnum] == types
Out[4]: True
(да, это отчаянные попытки)
In [6]: Optional[IntEnum] == types
Out[6]: False
< /code>
и < /p>
Код: Выделить всё
In [11]: issubclass(Enum, types)
Out[11]: False
< /code>
и < /p>
In [12]: issubclass(types, Enum)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In [12], line 1
----> 1 issubclass(types, Enum)
TypeError: issubclass() arg 1 must be a class
< /code>
и < /p>
In [13]: issubclass(types, Optional[Enum])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In [13], line 1
----> 1 issubclass(types, Optional[Enum])
File /usr/lib/python3.10/typing.py:1264, in _UnionGenericAlias.__subclasscheck__(self, cls)
1262 def __subclasscheck__(self, cls):
1263 for arg in self.__args__:
-> 1264 if issubclass(cls, arg):
1265 return True
TypeError: issubclass() arg 1 must be a class
< /code>
и < /p>
In [7]: IntEnum in types
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In [7], line 1
----> 1 IntEnum in types
TypeError: argument of type 'types.UnionType' is not iterable
< /code>
Зачем мне это было нужно < /h3>
У меня есть несколько случаев, когда я импортирую данные из файлов CSV и создаю объекты класса из каждой строки. csv.dictreader ()
[*] Правильно изменить типы, по крайней мере, для основных типов и перечислений
. тоже.
Подробнее здесь: https://stackoverflow.com/questions/745 ... -uniontype