我一直在阅读PEP484和526,但仍然无法弄清楚如何更好地对没有初始值的变量进行类型注释。
比如说,你有一个类,在__init__
中想要声明一个变量,但是不提供初始化值,而是在代码的后面进行赋值。通常我会这样做:
from typing import Optional, List
class SomeClass:
def __init__(self) -> None:
self.some_value: Optional[int] = None
self.other_var: Optional[List] = None
def _some_method(self) -> None:
self.some_value = 42
这样做是有效的,但我觉得使用 Optional 会让 __init__
方法变得过于繁忙和难以阅读。相反,我可以这样做:
from typing import List
class SomeClass:
def __init__(self) -> None:
self.some_value: int
self.other_var: List
def _some_method(self) -> None:
self.some_value = 42
显然,这会导致变量未初始化,但只要在引用它们之前正确地分配它们,一切都能正常工作,并且如果我在
__init__
中声明了许多类属性,则这样做可以使代码更易于阅读。使用第二种方法留下未初始化的变量可能会导致特定问题吗?
self.some_value: int = None
是可以的。就像在有类型的语言中声明但不初始化一样。 - user10325516