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

4 投票
3 回答
826 浏览
提问于 2025-04-15 19:49

我想在我的代码中做的事情是:

myobj = <SomeBuiltinClass>()
myobj.randomattr = 1
print myobj.randomattr
...

我可以自己创建一个叫做 SomeClass 的类,并在里面实现 __setattr____getattr__ 这两个功能。不过,我在想,Python里有没有现成的类或者简单的方法可以做到这一点呢?

3 个回答

0

一种解决方案是使用模拟对象(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
2

我喜欢用“Bunch”这个方法来处理这个问题。这里有一些不同的变种和讨论,大家可以在这里查看。

8

你可以直接使用一个空的类:

class A(object): pass

a = A()
a.randomattr = 1

撰写回答