「Pythonでのプロトコル」
「Pythonのプロトコル」
構造的サブタイプの使用方法
Python 3.8 では、新しい便利な機能であるプロトコルが導入されました。プロトコルは抽象基底クラス(ABC)の代替であり、属性と関数のみを基準にして、2つのクラスが互換性があるかどうかをチェックする構造的サブタイピングを可能にします。この記事では、詳細について説明し、実践的な例を使用してプロトコルの使用方法を示します。
Pythonにおける型付け
まず、Pythonの型付けについて説明しましょう。Pythonは動的型付け言語であり、型は実行時に推論されます。次のコードは問題なく実行されます:
def add(x, y): return x + yprint(add(2, 3))print(add("str1", "str2"))
最初の呼び出しは整数の加算であるため、結果は5を返します。2番目の呼び出しは文字列の連結であり、”str1str2″を返します。これは、静的型付けのC++などとは異なり、型宣言が必要ではありません:
int add(int x, int y) { return x + y;}std::string add(std::string x, std::string y) { return x + y;}int main(){ std::cout<<add(2, 3); std::cout << add("str1", "str2"); return 0;}
静的型付けは、コンパイル時にエラーをキャッチする可能性があるという利点があります。一方、動的型付けはより迅速なプロトタイピングや実験が可能になります。そのため、Pythonは非常に人気があります。
動的型付けはダック・タイピングとも呼ばれ、言い換えると「もしもそれがアヒルのように歩き、アヒルのように鳴くのであれば、それはアヒルである」ということです。つまり、オブジェクトが同じ属性/関数を提供している場合、同様に扱われ、他の種類を必要とする関数に渡すことができます。
ただし、特に大規模でよりプロフェッショナルなソフトウェア製品では、この信頼性のなさはメリットよりもデメリットが多くなります。そのため、静的型チェックに向けた傾向があり、例えばmypyを使用して型ヒントを提供することがあります。
サブタイピング
興味深い問題の1つは、前述のダック・タイピングの短いパラグラフで示されているように、サブタイピングです。関数のシグネチャがfoo(x: X)
である場合、mypyはどのようなクラスがX
以外にその関数に渡されることを許可しますか?(注:現在は…)
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles