【发布时间】:2021-08-24 23:29:57
【问题描述】:
我一直在阅读有关此主题的内容,我的理解是,如果我们对参数进行注释,Python 不会在运行时删除注释。所以在这个例子中:
def f(x:int):
return x
x 是整数的事实在运行时仍然保留。 相比之下,如果我们有:
def f():
y :int ; y=5
return y
那么y :int 不会被保留。无论如何在 Python 中为赋值语句声明类型,以便在运行时保留注释?
编辑:
我的意思是:
class A:
def f(self,x:int):
y :int ; y=5
return (x,y)
print(typing.get_type_hints(A.f))
结果是:
{'x': <class 'int'>}
所以我们只能恢复参数类型但y:int已被删除
【问题讨论】:
-
为了什么目的?
-
“x 是整数的事实仍然保留在运行时”是什么意思?我不知道有这样的事情,除了
f.__annotations__本身。 -
您能否说明您希望如何访问这些注释?例如,给定
def f(ytype): y: ytype = ytype(); return y,您将如何恢复注释,ytype仅针对f的特定调用定义。 -
请注意,在全局/类范围内,
y: int = 5确实创建了一个可访问的注解——在模块/类的__annotations__中。重要的不是陈述,而是范围。 -
@MisterMiyagi 你能澄清一下我将如何调用它吗?如果我做 print(f().__annotations__) 我得到那个'int'对象没有属性'annotations'。我是否需要使用此属性定义自定义类型?
标签: python python-3.x types python-3.8 type-hinting