我想使用一个类型提示,它是一个具有某种结构的对象,如下所示:
import typing
class MyType:
def __init__(self, param):
self.param = param
def func(a: MyType(1)):
pass
print(typing.get_type_hints(func))
运行良好,生产效率高
{'a': <__main__.MyType object at 0x107a3c110>}
但如果有人加上
from __future__ import annotations
在代码的开头,模仿python3.8+的默认行为(将注释转换为在get_type_hints()
中求值的字符串),它会产生一个错误
TypeError: Forward references must evaluate to types. Got <__main__.MyType object at 0x10f4ff0d0>
是否可以使用新的注释行为来实现这一点?据我所知,我需要对MyType
进行子类化,使其对象本身成为类型,但我无法确定应该使用哪个基类。你知道吗
typing.get_type_hints()
将尝试将任何可能是forward references的注释转换为类型。你知道吗在您的示例中,
a
的注释不是type
的子类,因为它是MyType
的实例。MyType
本身是type
的一个子类。你知道吗也许你的代码就是这么写的?在大多数情况下,用类型的实例注释函数没有多大意义。你知道吗
一种可能的方法是创建元类:
这满足
get_type_hints()
。你知道吗typing
定义了自己的元类,但是它们都被标记为私有的并且没有文档记录,所以最好不要碰它们。你知道吗相关问题 更多 >
编程相关推荐