2011-08-01 8 views
0

Dive into Python: HTTP Web Services -オンザフライでオブジェクトのデータ属性をどのように調理することが可能ですか?

class DefaultErrorHandler(urllib2.HTTPDefaultErrorHandler): 
    def http_error_default(self, req, fp, code, msg, headers): 
     result = urllib2.HTTPError(
      req.get_full_url(), code, msg, headers, fp) 
     result.status = code 
     return result 

HTTPErrorオブジェクトには、最初は属性のステータス '、すなわちを持っていません。ステータスデータ属性がHTTPErrorクラス定義に存在しません。つまり、HTTPErrorのインスタンスにメモリを割り当てると、ステータスデータ属性の割り当てが行われません。

次に、次の行の同じインスタンスのステータスデータ属性をどのように作成できますか?これは、Pythonにそれは私が第11章

答えて

3

のPythonまで、これをキャッチしていない残念だC++/Java


で利用できなかった。この柔軟性を提供しているの私は気付いていない午前魅力的な何かがその下で起こっているようですCやJavaとは異なるデータ型の概念を持っています。インスタンスが作成されていれば、Pythonはインスタンスのデータメンバーにメモリを割り当てません。代わりに、インスタンスが作成されると、__dict__属性が辞書に属性名を値にマッピングすることを指示します。この辞書は、標準的なPython辞書と同じように動的です。あなたは

result.status = code 

キー"status"のエントリと値codeを行う場合は、この辞書に追加されます。

+0

私はあなたがキー "状態"で意味すると思います... –

+0

@Vaibhav:はい、ありがとうございます。修正されました。 –

+0

あなたはまた、 "インスタンス"に言及しました。すべてがオブジェクトなので、それ自体すべてに '__dict__'属性が存在すると仮定することは安全でしょうか? –

関連する問題