预期类型为“MyObject”,但在带有类型提示的 __init__ 中得到“None”

rot*_*oup 2 python type-hinting pycharm

初始化实例变量时,我喜欢包含类型提示。然而,有时我还没有准备好为其分配任何特定值,我希望它以“无”开始。

self._active_cal_fluid: MyObject = None
Run Code Online (Sandbox Code Playgroud)

这导致 PyCharm 给我一个检查错误: Expected type 'MyObject', got 'None' instead

我无法创建 的“空”版本,MyObject()因为这在我的上下文中没有意义。如果我稍后在其他方法中初始化它,它会抱怨我在init () 之外初始化实例变量,并且类型提示不起作用。

我更愿意启用类型提示。我一般不想禁用此检查,我只想仅当对象初始化为“无”时才消除此特定警告。PyCharm 中可能有这样的事情吗?

bit*_*nox 10

类型注释根本就是错误的。在你的情况下,self._active_cal_fluid可以有两种类型:

键入 MyObject 并键入 None

这可以写成:Union[None, MyObject]Optional[MyObject]

这是完整的注释

from typing import Optional

...
# definition of MyObject
...

class MyClass(object):
    def __init__(self) -> None:
        self._active_cal_fluid: Optional[MyObject] = None

Run Code Online (Sandbox Code Playgroud)

如果在类定义时未定义“MyObject”,则需要使用“前向注释”并将类型放入引号中:

from typing import Optional

class MyClass(object):
    def __init__(self) -> None:
        self._active_cal_fluid: Optional["MyObject"] = None

...
# definition of MyObject
...

Run Code Online (Sandbox Code Playgroud)