__init __ (self) -> Nenhum: vs __init __ (self): em python [duplicado]
Qual é a diferença entre 1) __init__(self) -> None:e 2) __init__(self):?
class A:
def __init__(self) -> None:
self.a = 5
class B:
def __init__(self):
self.a = 5
print (" A : ", A().a)
print (" B : ", B().a)
Respostas
A -> Noneparte é uma dica de tipo. Ele foi introduzido no PEP 484. Você pode ler mais sobre ele aqui . Ambos os __init__métodos que você mostrou são equivalentes no tempo de execução. As dicas de tipo podem ser usadas por verificadores de tipo, como mypy ou Pyright .
Esta mypydocumentação resume tudo perfeitamente:
Como mypy é um analisador estático ou uma ferramenta semelhante a um lint, as anotações de tipo são apenas dicas para mypy e não interferem na execução do programa. Você executa seu programa com um interpretador Python padrão e as anotações são tratadas efetivamente como comentários.
Esta também é uma parte interessante do PEP 484 que explica a lógica por trás da implementação -> Nonedo __init__método.
(Observe que o tipo de retorno de init deve ser anotado com -> Nenhum. A razão para isso é sutil. Se init assumiu uma anotação de retorno de -> Nenhum, isso significaria que um método init sem argumento e não anotado deveria ainda tem verificação de tipo? Em vez de deixar isso ambíguo ou introduzir uma exceção para a exceção, simplesmente dizemos que init deve ter uma anotação de retorno; o comportamento padrão é, portanto, o mesmo que para outros métodos.)