是否存在可以保存任何用户属性的现有Python类?

是否存在可以保存任何用户属性的现有Python类?,python,struct,Python,Struct,当我需要具有不同属性的多个对象时,可以使用此选项: class struct(object): def __init__(self,*args,**kwargs): for key,val in kwargs.items(): setattr(self,key,val) 但是我想知道是否已经没有内置的了?除非我不理解你的问题,这不是我们使用dict的目的吗?当然,它在本质上略有不同,但对象的属性在内部仍然存储在dict中(即\uuuuuuu dict)。这是

当我需要具有不同属性的多个对象时,可以使用此选项:

class struct(object):
   def __init__(self,*args,**kwargs):
      for key,val in kwargs.items():
         setattr(self,key,val)

但是我想知道是否已经没有内置的了?

除非我不理解你的问题,这不是我们使用
dict的目的吗?当然,它在本质上略有不同,但对象的属性在内部仍然存储在
dict
中(即
\uuuuuuu dict
)。这是一个符号问题

但是,如果你坚持,那么这是一种方法:

>>> class struct(dict):
...     def __getattribute__(self, key):
...         return self[key]
... 
>>> s = struct(a=5, b=7)
>>> s.a
5
注意,我使用的是而不是。这样做的原因是,否则我们无法存储名为
get
keys
的属性,因为这些是由定义的方法

如果不使用
\uuuu getattribute\uuuu
,则可能更高效,也同样有效。然后,代码变为:

>>> def struct(**kwargs):
...     return type('Struct', (object,), kwargs)
... 
>>> s = struct(a=5, b=7)
>>> s.a
5

我不知道你为什么不用字典来解释这件事

x = {}
x.update([(1, 2), (3, 4), (5, 6)])
print x
结果

{1: 2, 3: 4, 5: 6}

导致

{'a': 2, 'c': 6, 'b': 4}

我也在想同样的事情。我喜欢
x.foo
而不是
x[“foo”]
的便利性;一个句点比所有的
[“”]
更容易输入(并且更准确)

dict的优点是任何东西都可以是一把钥匙。(好的,任何可以散列的东西。)但是当我有一堆值要打包在一起时,我选择的键名无论如何都是有效的标识符

以下是这个想法的基本版本:

class struct(object):
    pass

x = struct()
x.foo = 1
只要您遇到这么多麻烦,您最好添加处理
kwargs
\uuu init\uu()
,以方便初始化。但我很懒,我希望有一些内置的东西

我试过这个,但不起作用:

x = object()
x.foo = 1   # raises AttributeError exception
我问了一下,得到的答案是
object
是Python中所有类型的根;它尽可能小。如果它可以像类实例一样使用自己的
\uuuu dict\uuu
属性,那么在Python中创建的每个对象都需要一个附加的
\uu dict\uu


我希望看到
struct
作为Python3.x的内置组件添加。但我明白为什么不是这样:保持语言的简洁是一个值得追求的目标,而这个功能自己编写起来非常简单。

你似乎在寻找这样的东西:好的分析。让我添加两件事:(1)通过定义
\uuuuu slots\uuuu
,它没有
\uuuu dict\uuuu
对象的这个属性也可以用于其他类(更多信息,请参阅);(2) 关于你的最后一段:
导入这个
声明:应该有一个——最好只有一个——显而易见的方法来完成它。
x = object()
x.foo = 1   # raises AttributeError exception