Python には、コンテナーの種類に固有の ABC があります。「…クラスが特定のインターフェースを提供するかどうかをテストするために使用される」と書かれています。(そして、それらは一部の mixin にも役立ちますが、当面は無視しましょう。)
これらの ABC のいくつかが本当に役立つ理由を理解するのに苦労しています。おそらく私の問題は、ドキュメントの例が学術的すぎるということですが、これらの例を使用すると:
# Verbatim
size = None
if isinstance(myvar, collections.abc.Sized):
size = len(myvar)
# Is that so much better than
size = None
if hasattr(myvar, '__len__'):
size = len(myvar)
2 番目のケースでは、インポートを回避すると、コードがより明確に見えます。名前から collections.abc.Sized の意味を推測したり調べたりすることはできますが、「長さがある場合はその長さを取得する」ほど明示的ではありません。
コレクション型のテストに対する abc のアプローチは、明示的なhasattr
テストよりも実際に慣用的な Python ですか? もしそうなら、それはなぜですか? (単純な方が複雑な切り札よりも優れていますか? この場合、明示的な切り札は暗黙的な切り札よりも優れていますか?)