python对象样式的字典访问;无法计算它

2024-05-21 00:11:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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初学者。你知道吗


Tags: nonameinselfifvaluedefattribute
2条回答

__getattr__用于您希望获取数据的时间。你知道吗

__setattr__用于设置数据。你知道吗

__delattr__用于您想要删除数据的时候。你知道吗

现在,方法应该很清楚了。你知道吗

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)

ObjectDict实例是通过类继承的常规字典。见ObjectDict(dict)

__getattr__魔术函数允许为任何对象定义点符号访问。它只是在这里调用正常的字典访问

类似地,__setattr____delattr__允许设置和删除(使用Python的del表达式)点表示法中的值。但是,要设置嵌套值,需要第一个键的值也是ObjectDict

相关问题 更多 >