不確定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