程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Python-访问像属性一样的字典键?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Python-访问像属性一样的字典键??

开发过程中遇到Python-访问像属性一样的字典键?的问题如何解决?下面主要结合日常开发的经验,给出你关于Python-访问像属性一样的字典键?的解决方法建议,希望对你解决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__()方法,我们可以确保它的行为(已经)完全像字典一样,因为该函数调用了所有字典实例化代码。

如“ 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!"

解决方法

我发现访问Dict键obj.foo而不是更为方便obj['foo'],因此我编写了以下代码段:

class AttributeDict(Dict):
    def __getattr__(self,attr):
        return self[attr]
    def __setattr__(self,attr,value):
        self[attr] = value

但是,我认为一定有某些原因导致Python无法立即提供此功能。以这种方式访问​​字典键的注意事项和陷阱是什么?

大佬总结

以上是大佬教程为你收集整理的Python-访问像属性一样的字典键?全部内容,希望文章能够帮你解决Python-访问像属性一样的字典键?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。