python – 类型检查返回类PEP 484

python – 类型检查返回类PEP 484,第1张

概述我在 python中有一个函数,它返回一个类而不是一个实例.如何指示返回的值是特定类型的子类? 在下面的示例中,我将返回值设置为type,但我还想表明该类型具有BaseClass的所有属性: from typing import Dict, Anydef class_constructor(name: str, attrs: Dict[str, Any]) -> type Constr 我在 python中有一个函数,它返回一个类而不是一个实例.如何指示返回的值是特定类型的子类?

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

from tyPing import Dict,Anydef class_constructor(name: str,attrs: Dict[str,Any]) -> type    ConstructedClass = type(name,(BaseClass,),attrs)    return ConstructedClassclass BaseClass: ...

我不能说(…) – > BaseClass因为那将指示BaseClass的实例而不是BaseClass本身.

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

from tyPing import Dict,Anyclass 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
总结

以上是内存溢出为你收集整理的python – 类型检查返回类PEP 484全部内容,希望文章能够帮你解决python – 类型检查返回类PEP 484所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1196086.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存