加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 类型检查返回类PEP 484

发布时间:2020-12-20 13:11:29 所属栏目:Python 来源:网络整理
导读:我在 python中有一个函数,它返回一个类而不是一个实例.如何指示返回的值是特定类型的子类? 在下面的示例中,我将返回值设置为type,但我还想表明该类型具有BaseClass的所有属性: from typing import Dict,Anydef class_constructor(name: str,attrs: Dict[st
我在 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,Any]) -> Callable[Any,BaseClass]
    ConstructedClass = type(name,attrs)
    return ConstructedClass

如果您知道__init__签名,则可以在Callable [Any,…]中使用它而不是Any.

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

from typing import Dict,Any]) -> Type[BaseClass]
    ConstructedClass = type(name,attrs)
    return ConstructedClass

解决方法

我认为您需要创建一个新类,BaseClass仅将其用作标记它和任何后代类的方法.

class BaseClassMeta(type):
     pass

 class BaseClass(metaclass=BaseClassMeta):
     ...

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读