定期,我想在 Python 中创建完全空的对象。基本上,我想要一个键是属性的字典。在 Python 2.x 中,我可以像这样创建旧式类型:
class Empty: pass
这将创建一个只有两个属性(__doc__
和__module__
)的类型。在 Python 3.x 中,一切都是新样式的类,所以我得到了 18 个属性。
在我目前的情况下,我有一个类允许您在单元测试中指定需要猴子修补的类型。应用补丁时,我正在创建一个具有属性的类型,该属性带有每个模拟类型的名称。这几乎就是我当前的实现正在做的事情:
class EmptyType: pass
...
mocks = EmptyType()
for mock_name, mock in patches:
setattr(mocks, mock_name, mock)
我担心的是,如果有人在嘲笑私有成员,他们可能会遇到与EmptyType
对象中名称的命名冲突。这就是为什么我想尽可能少地保留属性EmptyType
。说mocks.find_users
起来比说起来容易得多mocks["find_users"]
,尤其是当我知道名称必须是有效标识符时。
现在,我已经提供了给 mocks 不同的名字的能力,而不是默认的名字。不过,首先避免令人困惑的错误会很好。在 JavaScript 中创建几乎为空的类型非常容易,我希望 Python 中也有类似的东西,因为我一直在寻找它们的好用处。