问题Adding an attribute to a python dictionary from the standard library显示了如何将属性添加到内置数据类型。但是,有没有办法一个属性在一个步骤中添加一个变量,以便它可以在一个函数调用中使用,等同于以下:有没有办法同时设置一个对象的值和属性?
>>> class Adict(dict):
pass
>>> def myfunc(x):
print(x, x.my_attr)
>>> v = {'a':'cat'}
>>> var = Adict(v)
>>> var.my_attr = 'whatever'
>>> myfunc(var)
{'a': 'cat'} whatever
我想减少近3线单线,类似:
>>> myfunc(Adict(v, my_attr='whatever'))
其中穿过的字典两个项目(“a”和“my_attr”)和任何属性,或
>>> myfunc(Adict(v).my_attr='whatever')
其解析为一个关键字参数,而不是一个属性设置搜索G。有没有办法在一个步骤中设置一个值和一个属性?
-------- ----------编辑
要回答斯文的问题,我的工作延长优秀genson JSON架构处理器,其中包括以下代码:
# parse properties and add them individually
for prop, val in schema.items():
if prop == 'type':
self._add_type(val)
elif prop == 'required':
self._add_required(val)
elif prop in ['properties', 'patternProperties']:
v = Adict(val)
v._ptype = prop
self._add_properties(v, 'add_schema')
elif prop == 'items':
self._add_items(val, 'add_schema')
elif prop not in self._other:
self._other[prop] = val
我不需要特殊的事情,除了自定义字典能够与一个属性标记它,这将是很好能够清理我的屁股丑陋的3行代码properties
下以便它在视觉上匹配其他情况:-)。我可能会做的是将该标签单独传递给self._add_properties()
函数。
让我们重新启动。这一行'{'a':'猫'}无论如何都会把我抛弃。你能解释一下那是什么吗? – idjaw
将该信息作为属性添加到该值是一种相当不常见的方法。使用单独的参数似乎好得多,或者甚至可能是单独的函数。 (这两个函数可以调用通用的帮助函数。) –
'genson'数据结构嵌套到任意深度并递归处理。我需要一种方法来处理,例如,一个字典列表字典的字典,同时跟踪每个类型(独立或合并)。一个属性(如在getattr()中)似乎是在每个字典上标记类型的最直接方式,即使它不常见。在JSON术语中,“属性”是字典的键/值,因此将标签附加到字典而不添加键/值是目标。 – Dave