私は通常、コードをできるだけ一般的にしたいと思っています。私は現在、単純なライブラリを作成していますが、ライブラリでさまざまなタイプを使用できることは、今回は非常に重要だと感じています。
進む方法の1つは、人々に「インターフェース」クラスをサブクラス化するように強制することです。私には、これはPythonよりもJavaのように感じissubclass
られ、各メソッドで使用することもあまり魅力的ではありません。
私の好ましい方法は、オブジェクトを誠実に使用することですが、これにより、いくつかのが発生しAttributeErrors
ます。それぞれの危険な呼び出しをtry/exceptブロックでラップすることができます。これもちょっと面倒なようです:
def foo(obj):
...
# it should be able to sleep
try:
obj.sleep()
except AttributeError:
# handle error
...
# it should be able to wag it's tail
try:
obj.wag_tail()
except AttributeError:
# handle this error as well
エラー処理をスキップして、必要なメソッドを持つオブジェクトのみを使用することを期待する必要がありますか?[x**2 for x in 1234]
私が実際にaを取得し、aを取得しTypeError
ないような愚かなことをした場合AttributeError
(intは反復可能ではありません)、どこかでタイプチェックが行われている必要があります-同じことをしたい場合はどうなりますか?
この質問は一種の自由形式になりますが、上記の問題をクリーンな方法で処理するための最良の方法は何ですか?確立されたベストプラクティスはありますか?たとえば、上記の反復可能な「タイプチェック」はどのように実装されますか?
編集
AttributeError
sは問題ありませんが、ネイティブTypeErrors
関数によって生成されるものは、通常、エラーを解決する方法に関する詳細情報を提供します。これを例に取ってください:
>>> ['a', 1].sort()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < str()
私の図書館ができるだけ役立つようにしたいと思います。