我发现访问dict键obj.foo
而不是更为方便obj['foo']
,因此我编写了以下代码段:
class AttributeDict(dict):
def __getattr__(self, attr):
return self[attr]
def __setattr__(self, attr, value):
self[attr] = value
但是,我认为一定有某些原因导致Python无法立即提供此功能。以这种方式访问字典键的注意事项和陷阱是什么?
最好的方法是:
class AttrDict(dict):
def __init__(self, *args, **kwargs):
super(AttrDict, self).__init__(*args, **kwargs)
self.__dict__ = self
一些优点:
缺点:
简短说明
- 所有python对象在内部将其属性存储在名为的字典中__dict__。
- 不需要内部字典__dict__必须是“仅是简单的字典”,因此我们可以将dict()内部字典的任何子类分配给内部字典。
- 在我们的例子中,我们只需分配要AttrDict()实例化的实例(就像在中一样__init__)。
- 通过调用super()的__init__()方法,我们可以确保它的行为(已经)完全像字典一样,因为该函数调用了所有字典实例化代码。
Python不提供现成功能的原因之一
如“ cons”列表中所述,这将存储键的名称空间(可能来自任意和/或不受信任的数据!)与内置dict方法属性的名称空间结合在一起。例如:
d = AttrDict()
d.update({'items':["jacket", "necktie", "trousers"]})
for k, v in d.items(): # TypeError: 'list' object is not callable
print "Never reached!"
问题内容: 有没有一种方法可以为嵌套的python字典定义XPath类型查询。 像这样: 我还需要选择嵌套列表;) 这可以通过@jellybean的解决方案轻松完成: [EDIT 2016]这个问题和公认的答案都是古老的。更新的答案可能比原始答案做得更好。但是,我没有测试它们,所以我不会更改已接受的答案。 问题答案: 并不完全漂亮,但是您可能会使用 当然,这不支持xpath之类的东西,例如索引……
问题内容: 我有一个像下面这样的课程: 我想为源变量传递一个字符串,并访问同名的类成员。 我已经尝试过仅对函数有效(据我所知)以及具有extend和using ,但这也不起作用。做这个的最好方式是什么? 问题答案: 如果命名self的ANY属性(包括您的示例中的),将可以完美地工作。
问题内容: 我需要像这样用javascript制作字典 我不记得确切的符号了,但是有点像: javascript中有这样的事情吗? 问题答案: 这是一篇旧文章,但我认为无论如何我都应该提供一个图解的答案。 使用javascript的对象表示法。像这样: 并访问值: 或者您可以使用javascript文字对象表示法,其中键不需要用引号引起来:
怎么可以让这个 self.logger 属于子类(不是直接添加到子类属性这种方式),并且可以运行
我想更改字典的纬度和经度值。 它正在抛出以下错误消息: 对于此它在targetWaypoints内打印一个完整的字典。我想打印纬度值。 提前谢谢。
问题内容: 我有一个像这样的对象: 现在,当我尝试访问键“ 0”的值时,例如: …我遇到了错误。(也许这不是正确的方法吗?) 如何访问数字键的值(如上)? 问题答案: 这应该工作: (是的替代语法。) 您会收到此错误,因为在JavaScript中,标识符不能以数字开头。 JavaScript标识符必须以字母,下划线(_)或美元符号($)开头;后续字符也可以是数字(0-9)。因为JavaScript