私はsocket.fromfd()
関数を使っているPythonソケットコードを使っています。関数がPythonモジュールで利用可能かどうかを調べる
ただし、この方法はすべてのプラットフォームで使用できるわけではないため、メソッドが定義されていない場合の代替コードを作成しています。
実行時にメソッドが定義されているかどうかを判断する最良の方法は何ですか?以下は十分ですか、より良いイディオムがありますか?
if 'fromfd' in dir(socket):
sock = socket.fromfd(...)
else:
sock = socket.socket(...)
私はdir()
のドキュメントは、その使用を阻止するらしいことを少し心配です。 getattr()
は、より良い選択になるでしょうか:
if getattr(socket, 'fromfd', None) is not None:
sock = socket.fromfd(...)
else:
sock = socket.socket(...)
思考?
EDITPaoloが指摘したように、この質問は、属性の存在を決定するについての質問のnearly a duplicateです。しかし、使用されている用語が互いに素であるため(lkの"オブジェクトの属性が"と私の"のモジュールには" "の機能があります)、この2つを組み合わせることができない限り、
この回答はdownvoteに値するどのように私は見ていない...:/ –
私は読みやすさのためにGETATTR上ではhasattrを好みます! – bobince
"hasattrはKeyboardInterruptを含む例外を呑み込むので使用しないでください。" (c)http://doc.bazaar.canonical.com/developers/code-style.html#hasattr-and-getattr、 'getattr'は良いことです。 –