13章プロトコル
告白しなければならないことがある。Python型システムの一見して矛盾している問題について話すのを避けてきたことだ。Pythonの実行時における型システムと静的な型ヒントの間の根本的な考え方の違いについて話さなければならない。
「2章 Pythonデータ型入門」では、Pythonがダックタイピングをサポートする仕組みを説明した。ダックタイピングとは、オブジェクトが特定の振る舞いをサポートする限り特定のコンテキストでそのオブジェクトを使ってよいということだ。ダックタイピングを使うために基底クラスやあらかじめ定義された継承関係はいらない。
しかし、型チェッカは何らかの支援が得られなければダックタイピングの正しさを判断できない。型チェッカは静的解析の時点でわかっているデータ型なら処理できるが、実行時に行われるダックタイピングには手が出ない。
この問題を緩和するために、Python 3.8で導入されたプロトコルについて説明する。プロトコルは今触れた矛盾を解決する。プロトコルは型チェックの過程でダックタイピングされた変数にアノテーションをつける。ここでは、プロトコルが必要な理由、独自プロトコルの定義方法、プロトコルの高度な使い方を説明する。しかし、まずPythonのダックタイピングと静的型チェッカの間の断絶を理解する必要がある。
13.1 2つの型システムの間の緊張関係
この章では、自動ランチショップのデジタルメニューシステムを作る。このランチショップのメニューには、「小盛」、つまり一人前の半分を注文できる料理が多数含まれる。デリサンド、ラップサンド、スープは小盛になるが、ドリンクやハンバーガーは小盛にできない。重複を取り除くために、すべての「小盛」処理をこなすメソッドがほしい。例として料理のクラスを考える。 ...
Get ロバストPython ―クリーンで保守しやすいコードを書く now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.