プロトコルは、簡単に言うと「同じ変数やメソッドを持つクラス同士は同じ型として扱う」というものだ。いわゆる構造的部分型で、「静的なダックタイピング」という説明をされることが多い。両方を受け取ることができる。これは実行時には単なるアノテーションなので、これらをラップする共通クラスを作る場合と違って性能上のオーバヘッドもない。若干ハマった点として循環参照の問題がある。モジュールに定義する。モジュールの関数に型ヒントを書く。時に循環参照を起こしてエラーになってしまう。