I'm unsure of the Python convention for type hinting instance variables - I've been doing them within the __init__
constructor arguments like seen here:
class LoggedVar(Generic[T]):
def __init__(self, value: T, name: str, logger: Logger) -> None:
self.name = name
self.logger = logger
self.value = value`
But I also see the PEP conventions of annotating instance variables as such (snippet below) and then also doing type hinting within the __init__
arguments:
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
Lastly, later on in the PEP 526 article they say one can do the following for convenience and convention:
class Box(Generic[T]):
def __init__(self, content):
self.content: T = content
(Both of the above code snippets are from here.)
So — is one of these conventions better/more widely accepted than the others that I should try to stick to (better readability etc..)?