gpt4 book ai didi

python - "overload the dot operator"有什么技巧吗?

转载 作者:太空狗 更新时间:2023-10-29 16:53:35 28 4
gpt4 key购买 nike

我知道这个问题有点奇怪,但我想不出任何其他方式来表达它。我有一个处理大型 json 对象的应用程序,我希望能够说:

object1.value.size.whatever.attributexyz

代替

object1.get('value').get('size').get('whatever').get('attributexyz')

是否有一些聪明的方法来捕获将引发的 AttributeError 并在数据结构内部检查该属性是否对应于它的任何值?

最佳答案

object1的类定义中,

def __getattr__(self, key):
return self.get(key)

任何尝试解析对象本身实际上不存在的属性、方法或字段名称的尝试都将传递给 __getattr__ .

如果您无权访问类定义,即它类似于字典,请将其包装在一个类中。对于字典,您可以执行以下操作:

class DictWrapper(object):
def __init__(self, d):
self.d = d
def __getattr__(self, key):
return self.d[key]

请注意,如果 key 无效,将引发 KeyError;然而,惯例是引发 AttributeError(感谢 S. Lott!)。如有必要,您可以像这样将 KeyError 重新引发为 AttributeError:

try:
return self.get(key)
except KeyError as e:
raise AttributeError(e)

还要记住,如果您从 __getattr__ 返回的对象也是字典,例如,您也需要将它们包装起来。

关于python - "overload the dot operator"有什么技巧吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5517241/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com