PythonにはというシングルトンがありNotImplemented
ます。
例外が発生するNotImplemented
代わりに、なぜ誰かが戻りたいのでしょうかNotImplementedError
?無効なメソッドを実行するコードなどのバグを見つけにくくするだけではないですか?
PythonにはというシングルトンがありNotImplemented
ます。
例外が発生するNotImplemented
代わりに、なぜ誰かが戻りたいのでしょうかNotImplementedError
?無効なメソッドを実行するコードなどのバグを見つけにくくするだけではないですか?
回答:
これは__lt__()
、関連する比較方法がリストの並べ替えなどで間接的によく使用されるためです。アルゴリズムが別の方法を試すか、デフォルトの勝者を選ぶこともあります。例外を発生させると、キャッチされない限りソートから抜け出しますが、発生NotImplemented
しないため、以降のテストで使用できます。
http://jcalderone.livejournal.com/32837.html
そのリンクを要約すると:
"
NotImplemented
は、操作を満たすために他の誰かに依頼する必要があることをランタイムに通知します。式でa == b
、がa.__eq__(b)
返されたNotImplemented
場合、Pythonはを試行しb.__eq__(a)
ますb
。orTrue
またはを返すのに十分な知識がある場合False
、式は成功できます。そうでない場合、ランタイムはフォールバックビルトイン(のIDに基づいて行動==
して!=
)。」
a.__eq__(b)
がNotImplementedが返されたかどうかをチェックするとき、代わりにNotImplementedErrorを簡単にキャッチできませんでしたか(そして、b.__eq__(a)
その後に呼び出しまたは何かを実行できません)?
ユースケースが異なるためです。
ドキュメントの引用(Python 3.6):
バイナリの特別なメソッド(例:
__eq__()
、__lt__()
、__add__()
、__rsub__()
、など)の動作は他のタイプに対して実装されていないことを示すために
[...]ユーザー定義の基本クラスでは、メソッドをオーバーライドするために派生クラスが必要な場合、またはクラスの開発中に実際の実装を追加する必要があることを示すために、抽象メソッドがこの例外を発生させる必要があります。
詳細については、リンクを参照してください。