python 字典的对象样式访问;想不通

python object style access for dictionaries ; cant figure it out

class ObjectDict(dict):
    """ allows object style access for dictionaries """

    def __getattr__(self, name):
        if name in self:
            return self[name]
        else:
            raise AttributeError('No such attribute: %s' % name)

    def __setattr__(self, name, value):
        self[name] = value

    def __delattr__(self, name):
        if name in self:
            del self[name]
        else:
            raise AttributeError('No such attribute: %s' % name)

有人可以为我解释这段代码吗?我只是一个 python 初学者。

一个 ObjectDict 实例 是一个 通过 class 继承的常规字典。参见 ObjectDict(dict)

__getattr__ 魔法函数允许为任何对象定义 dot-notation 访问权限。它只是在这里调用正常的字典访问

类似地,__setattr____delattr__ 允许设置和删除(使用 Python 的 del 表达式)来自 dot-notation 的值。但是,要设置嵌套值,您需要第一个键的值也是一个 ObjectDict

__getattr__ 用于当您想要 get 数据时。

__setattr__ 用于当您想要设置 数据时。

__delattr__ 用于 del 数据。

现在,方法应该很清楚了。

def __getattr__(self, name):
    # if the key exists... return it.
    if name in self:
        return self[name]
    # if not : raise an error.
    else:
        raise AttributeError('No such attribute: %s' % name)

def __setattr__(self, name, value):
    # set VALUE as value, with NAME as key in the dict.
    self[name] = value

def __delattr__(self, name):
    # if the key "name" exists in the dictionnary... delete it
    if name in self:
        del self[name]
    # else, it doesnt exist, so cant delete it.
    else:
        raise AttributeError('No such attribute: %s' % name)