Создание объекта, который также является типом (например, str! Type!) - PullRequest
0 голосов
/ 29 мая 2020

Наша система просит пользователей аннотировать параметры функции аннотациями определенного типа:

def some_func(data_path: InputPath('CSV') = None):

InputPath - это нормальный класс.

class InputPath:
  def __init__(self, type_name):
    sefl.type_name = type_name

Все работает нормально, но наши пользователи жалуются что линтеры вроде mypy показывают ошибки, потому что InputPath('CSV') - это объект, а не тип.

Каким будет самый простой и наименее опасный способ удовлетворить mypy? Было бы здорово, если бы он действовал как issubclass(InputPath('CSV'), str) (в других случаях issubclass(InputTextFile('CSV'), TextIOWrapper)).

Я мог бы попробовать что-то вроде следующего, но это выглядит хакерским:

def InputPath(type_name):
  return type(
    'InputPath_' + type_name,
    (str,),
    {'type_name': type_name},
  )
...