__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アノテーションを付ける必要があると単純に言います。したがって、デフォルトの動作は他のメソッドの場合と同じです。)