如何正确注释可选的 class 属性?

How to annotate optional class properties correctly?

我有以下示例 class,可选 str 'abc'。

class ABC:
    def __init__(self, abc: Optional[str] = None) -> None:
        self.a = abc

    @property
    def a(self) -> str:
        return self._a

    @a.setter
    def a(self, abc: Optional[str]) -> None:
        if abc is None:
            self._a: str = "ABC"
        else:
            self._a = abc

'abc'赋值给@属性a。 setter 方法测试 'abc' 是否为 None,如果是,则将其替换为默认字符串。所以 getter 的 return 值总是来自类型 str 并且不再是可选的。但是我找不到正确注释它们的方法。我总是遇到以下 mypy 错误:

Incompatible types in assignment (expression has type "Optional[str]", variable has type "str")

据我所知,从未支持具有不同 getter 和 setter 类型的属性。参见 this discussion

我可以建议使用相同的类型或# type: ignore