5

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 ですか? もしそうなら、それはなぜですか? (単純な方が複雑な切り札よりも優れていますか? この場合、明示的な切り札は暗黙的な切り札よりも優れていますか?)

4

2 に答える 2

1

私には、ミックスインがこのモジュールの主要部分のようです。また、ほとんどの場合、少なくとも私にとっては、完璧なコードを作成することが主な目標です (私がそれを管理したことはありません)。ABC モジュールの機能が何をするかについて非常に明確であるように見えるという事実は、コードの共有とスキミングに役立ちます。最後に、これについては私が間違っているかもしれないので、当てにしないでください。ただし、ABC の関数の中には、1 つの関数で複数の属性をチェックできるものがあると思います。

于 2013-08-25T16:26:43.550 に答える