类工厂/选择器的python rtype docstring/restructured text

Tig*_*gra 10 python restructuredtext docstring pycharm

:rtype:指定这是返回对象的类型

因此,当我obj在下面的代码片段中创建对象时,我收到来自IDE的警告cls is not callable,因为IDE期望,这clsobject类型的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)
Run Code Online (Sandbox Code Playgroud)

同时我通过""":type: SomeAbstractClass"""在创建对象后添加来解决这个问题 ,但是这并没有取消警告并且它是脏的解决方案.

顺便说一句,谈论python 2.x.

小智 -4

如果数据是 SomeAbstractClass 的实例,则可以使用以下代码片段:

示例1:

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

    return type(data)
Run Code Online (Sandbox Code Playgroud)

示例2:

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

    return data.__class__
Run Code Online (Sandbox Code Playgroud)

如果你想使用 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__
Run Code Online (Sandbox Code Playgroud)

当你使用这个时你应该捕获 KeyError 异常

  • 抱歉,但这并不能回答问题。问题是如何在文档字符串中指定返回值是类,而不是实际返回类,因为这不是问题。 (4认同)