Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中类似字典的对象,允许设置任意属性_Python_Dictionary_Attributes - Fatal编程技术网

Python中类似字典的对象,允许设置任意属性

Python中类似字典的对象,允许设置任意属性,python,dictionary,attributes,Python,Dictionary,Attributes,我想在代码中执行的操作: myobj = <SomeBuiltinClass>() myobj.randomattr = 1 print myobj.randomattr ... myobj=() myobj.randomattr=1 打印myobj.randomattr ... 我可以实现一个自定义的SomeClass,它实现\uuuuu setattr\uuuuuuu\uuuuuu getattr\uuuuuu。 但是我想知道是否已经有一个内置的Python类或简单的方法来实

我想在代码中执行的操作:

myobj = <SomeBuiltinClass>()
myobj.randomattr = 1
print myobj.randomattr
...
myobj=()
myobj.randomattr=1
打印myobj.randomattr
...
我可以实现一个自定义的SomeClass,它实现
\uuuuu setattr\uuuuuuu
\uuuuuu getattr\uuuuuu

但是我想知道是否已经有一个内置的Python类或简单的方法来实现这一点?

我喜欢使用Bunch习语来实现这一点。这里有一个变体列表和一些讨论。

您可以使用一个空类:

class A(object): pass

a = A()
a.randomattr = 1

一种解决方案是使用mock的:

from mock import Mock
myobj = Mock()
myobj.randomattr = 1
print myobj.randomattr
第二种解决方案是使用namedtuple:

from collections import namedtuple
myobj = namedtuple('MyObject', '')
myobj.randomattr = 1
print myobj.randomattr

很高兴知道。但Python库中已经有空类了吗?不,没有内置的空类。您可以在一行代码中定义一个空类,如图所示。一行代码与import语句一样短,因此没有必要寻找内置的空类。