给出以下代码
@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
?
只需在子类中将
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