栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python-访问像属性一样的字典键?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-访问像属性一样的字典键?

最好的方法是:

class AttrDict(dict):    def __init__(self, *args, **kwargs):        super(AttrDict, self).__init__(*args, **kwargs)        self.__dict__ = self

一些优点:

  • 它实际上有效!
  • 没有字典类方法被遮盖(例如,.keys()工作正常)
  • 属性和项目始终同步
  • 尝试访问不存在的键作为属性正确引发,AttributeError而不是KeyError

缺点:

  • 如果这样的方法被传入数据覆盖,它们.keys()将无法正常工作
  • 在Python <2.7.4 / Python3 <3.2.3中导致内存泄漏
  • 皮林特(Pylint)E1123(unexpected-keyword-arg)和E1103(maybe-no-member)
  • 对于初学者来说,这似乎是纯魔术。

简短说明
- 所有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!"


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/393825.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号