gpt4 book ai didi

python - 类型检查返回类 PEP 484

转载 作者:太空宇宙 更新时间:2023-11-03 12:04:25 26 4
gpt4 key购买 nike

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

在下面的例子中,我将返回值设置为类型,但我想进一步说明该类型具有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__签名,您可以使用它代替 AnyCallable[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

最佳答案

我认为您需要创建一个新类,由 BaseClass 仅用作标记它和任何后代类的方式。

 class BaseClassMeta(type):
pass

class BaseClass(metaclass=BaseClassMeta):
...

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

关于python - 类型检查返回类 PEP 484,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36582611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com