Kri*_*kar 7 python type-hinting python-typing
我有一个类变量,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
self.valueMyOtherClass保证在使用之前被初始化为 的实例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
Run Code Online (Sandbox Code Playgroud)
这也消除了类型检查器的歧义,因为属性的返回类型始终 MyOtherClass是。