不确定Python的约定类型暗示的实例变量 - 我一直在__init__
构造函数的参数内做他们喜欢在这里看到:类型提示公约实例变量的Python
class LoggedVar(Generic[T]):
def __init__(self, value: T, name: str, logger: Logger) -> None:
self.name = name
self.logger = logger
self.value = value`
链接,上面的代码片段:https://docs.python.org/3/library/typing.html#user-defined-generic-types
但我也看到注释实例变量的__init__
参数内的PEP约定等(以下片段),然后还做类型提示:
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
最后,后来就PEP526文章中,他们说可以做的方便和约定如下:
class Box(Generic[T]):
def __init__(self, content):
self.content: T = content
网址两个上面的代码片段: https://www.python.org/dev/peps/pep-0526/#class-and-instance-variable-annotations
那么,这些公约之一比我应该尝试坚持的其他更好/更广泛接受(更好的可读性等)?
直到现在我还没有意识到PEP 526;谢谢。 – chepner
为什么在第二个例子中是'captain'和'damage'实例变量?他们也不是类变量吗?或者事实是,它们在init方法中被改变,使它们成为实例变量?如果我有一个列表,并用'list.append()'改变它,那么所有实例都会共享这个改变,所以它仍然是一个类变量。 – Asara