如何动态地为对象烹饪数据属性?

时间:2011-08-01 12:03:15

标签: python

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章我才明白这一点。

1 个答案:

答案 0 :(得分:3)

Python与C或Java有不同的数据类型概念。如果创建实例的数据成员,Python不会为其分配内存。相反,当创建实例时,它会获得一个__dict__属性,该属性指向将属性名称映射到值的字典。这本词典与任何标准Python词典一样动态。如果你这样做

result.status = code

密钥为"status"且值code的条目已添加到此词典中。