【问题标题】:Expected type 'MyObject', got 'None' instead in __init__ with type hints [duplicate]预期类型“MyObject”,在带有类型提示的 __init__ 中得到“无”[重复]
【发布时间】:2020-12-09 03:08:38
【问题描述】:

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

self._active_cal_fluid: MyObject = None

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

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

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

【问题讨论】:

标签: python pycharm type-hinting


【解决方案1】:

类型注释完全错误。 在您的情况下,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

如果在类定义时没有定义“MyObject”,则需要使用“forward Annotation”并将类型放在引号中:

from typing import Optional

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

...
# definition of MyObject
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 2019-10-16
    • 1970-01-01
    • 2020-10-27
    • 2016-11-29
    • 2017-04-29
    • 2018-03-28
    相关资源
    最近更新 更多