__init __(self)->なし:vs __init __(self):Pythonで[重複]

Sep 25 2020

1)__init__(self) -> None:と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)

回答

radzak Sep 25 2020 at 21:57

-> None部分は型ヒントです。これはPEP484で導入されました。詳細については、こちらをご覧ください。__init__示した両方のメソッドは、実行時に同等です。タイプヒントは、mypyやPyrightなどのタイプチェッカーで使用できます。

このmypyドキュメントはそれを完全に要約しています:

mypyは静的アナライザーまたはlintのようなツールであるため、型の注釈はmypyの単なるヒントであり、プログラムの実行時に干渉することはありません。標準のPythonインタープリターを使用してプログラムを実行すると、アノテーションはコメントとして効果的に扱われます。

これは、PEP 484の興味深い部分でもあり-> None、__init__メソッドの導入の背後にある理論的根拠を説明しています。

(initのreturnタイプには-> Noneの注釈を付ける必要があることに注意してください。これの理由は微妙です。initが-> Noneのreturn注釈を想定している場合、引数のない、注釈のないinitメソッドが必要であることを意味します。まだタイプチェックされていますか?これをあいまいなままにしたり、例外に例外を導入したりするのではなく、initにreturnアノテーションを付ける必要があると単純に言います。したがって、デフォルトの動作は他のメソッドの場合と同じです。)