Python: Как проверить, какие типы в определенных типах. Uniontype?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python: Как проверить, какие типы в определенных типах. Uniontype?

Сообщение Anonymous »

Я использую Python 3.11, и мне нужно было бы обнаружить, является ли дополнительным атрибутом class тип enum (то есть тип подкласса enum).
с 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 () 
возвращает DICT [str, str] , и мне нужно исправить типы для полей, прежде чем пытаться создать объект. Тем не менее, некоторые из полей объекта являются необязательными [int] , необязательно [bool] , необязательный [enumx] или необязательный [classx] . У меня есть несколько из этих классов, которые многоеализация моего csvimportable () класс/интерфейс. Я хочу внедрить логику один раз в класс csvimportable () вместо того, чтобы писать примерно один код в полевых условиях в каждом подклассе. Это csvimportable._field_type_updater () должен:

[*] Правильно изменить типы, по крайней мере, для основных типов и перечислений
. :-)

Подробнее здесь: https://stackoverflow.com/questions/745 ... -uniontype
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»