我该如何在Python 3.5中为属性添加类型提示?

30

我有一个类,想要一个属性的初始值为None

class SomeClass:
    def __init__(self):
        self.some_attribute = None

我该如何添加类型提示,以便IDE能够理解some_attribute通常是AnotherClass类型?

2个回答

37
在Python 3.5中,您需要编写:
self.some_attribute = None  # type: AnotherClass

自 Python 3.6 开始,为变量添加了新的类型提示语法(PEP 526):

self.some_attribute: AnotherClass = None

这可能会导致每个类型检查系统都抱怨,因为None实际上不是AnotherClass的实例。相反,您可以使用typing.Union[None, AnotherClass],或简写:

from typing import Optional
...
self.some_attribute: Optional[AnotherClass] = None

1
Python 3.10+ 使用管道符号 |,许多语言使用它作为或运算符(参见 PEP 604)来表示 Typing.Union。
所以…
self.some_attribute: AnotherClass|None = None 更简洁,不需要导入 Typing。
顺便说一下,通常在 3.10 中也不再需要导入 Typing 来处理许多内建容器:list[int],而不是 List[int](后者仍然可用)。
注意:如果使用前向声明,则仍然需要 Optional["AnotherClass"],因为管道符号不起作用。
此外,管道符号可以处理更多情况,因为它是 Typing.Union 的简写:
some_attribute: AnotherClass|YetAnotherClass|None

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接