我有一个类变量,如下所示:
class MyClass:
def __init__(self):
self.value: MyOtherClass | None = None
self.initialize_value()
def initialize_value(self):
self.value = MyOtherClass()
def use_value(self):
return self.value.used
self.value
保证被初始化为实例MyOtherClass
在使用之前self.use_value()
;然而,它必须保持为None
在构造函数中。这里的困境是如何正确地提示这种情况。
- 如果我选择如上所示输入提示,我会得到一个
error: Item "None" of "Optional[MyOtherClass]" has no attribute "used" [union-attr]
- 如果我从构造函数中删除变量定义并将类型提示移至
self.initialize_value()
,我得到一个Instance attribute value defined outside __init__
来自 Pylint 的错误
解决这个问题的最佳方法是什么?多谢!
为了避免重复,当在整个类的多个方法中使用这样的属性时,对我来说,一个常见的模式是保护它并定义一个引发错误的属性(如果未设置其背后的属性):
class MyClass:
def __init__(self):
self._value: MyOtherClass | None = None
self.initialize_value()
@property
def value(self) -> MyOtherClass:
if self._value is None:
raise AttributeError("...")
return self._value
def initialize_value(self):
self._value = MyOtherClass()
def use_value(self):
return self.value.used
这也消除了类型检查器的歧义,因为属性的返回类型是always MyOtherClass
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)