在我的应用程序中,有很多类的行为本质上是这样的:
class A:
def __init__(self) -> None:
self.subject = None
def set_subject(self, subject: SpecificClass) -> None:
self.subject = subject
def do_something_with_subject(self) -> None:
self.subject.do_stuff()
它do_something_with_subject()
是始终在 之后调用的程序的不变量set_subject()
,但我必须在知道将主题设置为什么之前创建类A
,所以现在我在__init__()
. 在 的情况下subject
,唯一的逻辑默认值是None
。
现在解决问题:我的静态类型检查器(pyright)抱怨self.subject.do_stuff()
. 既然它在__init__()
那个subject
可以看到None
,它就告诉我那个do_stuff()
不是会员None
。一切都非常合理,除了这不是我希望看到的警告,因为我的程序是如何运行的。我也:
- 就像在
__init__()
. 它为您提供了课程内容的概述,而且我还听说一些 IDE 会查看__init__()
自动完成信息。 - 不想在代码中使用特定于类型检查器的指令来消除此警告,因为我希望其他开发人员可以自由使用他们自己喜欢的类型检查器。
- 不想
subject
用类似的东西进行注释,Any
从而将其排除在类型检查之外。
在这种情况下,有什么方法可以让我吃蛋糕吗?继续subject
接受类型检查审查,以某种方式声明它__init__()
,而不是让类型检查器认为它可以None
吗?