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
对象最初没有属性'status',即。 HTTPError
类定义中不存在status data属性。这意味着当我为HTTPError
的实例分配内存时,不会对状态数据属性进行分配。
那么我怎样才能在下一行中为同一个实例创建一个状态数据属性?看起来有些令人着迷,我不知道哪个给了python这种灵活性,这在C++/Java
遗憾的是,直到第11章我才明白这一点。
答案 0 :(得分:3)
Python与C或Java有不同的数据类型概念。如果创建实例的数据成员,Python不会为其分配内存。相反,当创建实例时,它会获得一个__dict__
属性,该属性指向将属性名称映射到值的字典。这本词典与任何标准Python词典一样动态。如果你这样做
result.status = code
密钥为"status"
且值code
的条目已添加到此词典中。