向mypy指示子类中的属性不能为none

问题描述 投票:0回答:1

给出以下代码

@dataclass
class MaybeTextContainer:
    text: list[str] | None


class CertainlyText(MaybeTextContainer):
    def __init__(self) -> None:
        super().__init__(text=[])
        self.say_hi()

    def say_hi(self) -> None:
        self.text.append("Hi")

mypy 会在最后一行抱怨

error: Item "None" of "list[str] | None" has no attribute "append"
。当然我可以在
assert self.text
函数中添加一个
say_hi
,但是如果你在很多函数中修改
self.text
那就很难看了。

有没有通用的方法来表明

self.text
不能再是
None

python mypy python-dataclasses
1个回答
0
投票

只需在子类中将

text
注释为
list[str]
即可:

from dataclasses import dataclass

@dataclass
class MaybeTextContainer:
    text: list[str] | None


class CertainlyText(MaybeTextContainer):
    text: list[str]
    
    def __init__(self) -> None:
        super().__init__(text=[])
        self.say_hi()

    def say_hi(self) -> None:
        self.text.append("Hi")

这通过了

mypy --strict
(mypy b1.9.0)的类型检查:

Success: no issues found in 1 source file

在 mypy Playground 上亲自尝试一下

© www.soinside.com 2019 - 2024. All rights reserved.