下面的变量初始化为none,但在__post_init__
期间,它被替换为outlook客户端实例
@dataclass
class Config:
"""Outlook configuration"""
mailbox: str
inbox: str
mailbox_obj: Union["Mailbox", None] = None
然而,静态类型分析正确地告知mailbox_obj没有成员(…)不是"none"的已知成员。我不想用if mailbox_obj
来保护所有东西只是为了满足类型分析。是否有其他方法使用数据类字段或其他东西?
如果我只使用常规类,问题就会消失,因为我可以在init中初始化问题变量其中类型将被推断为它的设置值,但是我必须编写额外的样板文件。
写这个问题让我想起了下面的东西,这可能就是我想要的:
mailbox_obj: "Mailbox" = field(init=False)
这是正确的方式吗?
是的,您想指定它不是init字段,所以您只需要像这样:
import dataclasses
class Mailbox:
pass
@dataclasses.dataclass
class Config:
"""Outlook configuration"""
mailbox: str
inbox: str
mailbox_obj: "Mailbox" = dataclasses.field(init=False)
def __post_init__(self):
# do some stuff...
self.mailbox_obj = Mailbox()
我将上面的代码保存在一个名为test_typing.py
的文件中,这里是mypy:
(py310) Juans-MBP:test juan$ mypy test_typing.py
Success: no issues found in 1 source file