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)
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)