Python rtype docstring/реструктурированный текст для фабрик классов/селекторов

: rtype: указывает, что это тип возвращаемого объекта

Поэтому, когда я создаю объект obj в следующем фрагменте, я получаю предупреждение от IDE, что cls is not callable, так как IDE ожидает, что cls есть object типа SomeAbstractClass, и я хочу SomeAbstractClass сам

IDE прав, поскольку это поведение по умолчанию. Но как я могу указать, что я возвращаю класс, а не экземпляр класса?
Указание type вместо SomeAbstractClass помогает немного, но не решение, поскольку не существует дополнительной интроспекции.

def class_selector(data):
    """
    :rtype: SomeAbstractClass
    :return: Return some class based on given parameters
    """

    return get_from.get(data.name)
cls = class_selector(data)
obj = cls(data.more_data)

Тем временем я решаю это, добавляя """:type: SomeAbstractClass""" после создания объекта, но это не отменяет предупреждение и это грязное решение.

Btw, говоря о python 2.x

Ответ 1

если данные являются экземплярами SomeAbstractClass, вы можете использовать следующие фрагменты:

пример 1:

def class_selector(data):
    """
    return: Return the class of data
    """

    return type(data)

Пример 2:

def class_selector(data):
    """
    return: Return the class of data.
    """

    return data.__class__

И если вы хотите использовать data.name для указания класса, вы можете использовать это:

def class_selector(data):
   """
   return: Return a class specified by data.name
   """
   return type(globals()[data.name])  #or use globals()[data.name].__class__

и вы должны поймать исключение KeyError, когда используете этот