类型检查返回类PEP 484

时间:2016-04-12 19:40:48

标签: python typing type-hinting

我在python中有一个函数,它返回一个类而不是一个实例。如何指示返回的值是特定类型的子类?

在下面的示例中,我将返回值设置为type,但我还想表明该类型具有BaseClass的所有属性:

from typing import Dict, Any

def class_constructor(name: str, attrs: Dict[str, Any]) -> type
    ConstructedClass = type(name, (BaseClass,), attrs)
    return ConstructedClass

class BaseClass: ...

我不能说(...) - > BaseClass,因为它表示BaseClass的实例而不是BaseClass本身。

要回答我自己的问题,这显示为python/typing issue #107。目前,最好的解决方案是:

from typing import Dict, Any

class BaseClass: ...

def class_constructor(name: str, attrs: Dict[str, Any]) -> Callable[Any, BaseClass]
    ConstructedClass = type(name, (BaseClass,), attrs)
    return ConstructedClass

如果您知道自己的__init__签名,则可以在Any中使用该签名代替Callable[Any, ...]

当添加对Type[T]的支持时,解决方案将是:

 from typing import Dict, Any

class BaseClass: ...

def class_constructor(name: str, attrs: Dict[str, Any]) -> Type[BaseClass]
    ConstructedClass = type(name, (BaseClass,), attrs)
    return ConstructedClass

1 个答案:

答案 0 :(得分:0)

我认为你需要创建一个新类,$( "#job_option_2" ).replaceWith('<div class="five wide column"> <%= select_tag "job2", options_for_select(@employee_jobs), id:"job_option_2",prompt:"Select Job", class:"fluid ui dropdown"%></div>') $( "#job_option_3" ).replaceWith('<div class="five wide column"> <%= select_tag "job3", options_for_select(@employee_jobs), id:"job_option_3",prompt:"Select Job", class:"fluid ui dropdown"%></div>') 仅用它来标记它和任何后代类。

BaseClass