我不确定Python中实例变量的类型提示惯例 - 我一直在__init__
构造函数参数中进行类型提示,就像这里看到的一样:
class LoggedVar(Generic[T]):
def __init__(self, value: T, name: str, logger: Logger) -> None:
self.name = name
self.logger = logger
self.value = value`
但是我也看到了PEP约定将实例变量注释为以下内容(下面是代码片段),然后在__init__
参数中进行类型提示:
class BasicStarship:
captain: str = 'Picard' # instance variable with default
damage: int # instance variable without default
stats: ClassVar[Dict[str, int]] = {} # class variable`
def __init__(self, damage: int, captain: str = None):
self.damage = damage
if captain:
self.captain = captain # Else keep the default
最后,在PEP 526文章中,为了方便和惯例,可以执行以下操作:
class Box(Generic[T]):
def __init__(self, content):
self.content: T = content
以上两个代码片段都来自这里。
那么,这两种惯例中是否有一种更好/更广为接受,我应该尽量遵循(更好的可读性等)?
captain
和damage
是实例变量?它们不也是类变量吗?还是因为它们在init
方法中被修改所以变成了实例变量?如果我有一个列表,并使用list.append()
进行修改,那么这个修改将共享所有实例,因此它仍然是类变量。 - Asara