嘿,我刚开始想这个,因为我遇到了一段代码,该代码期望一个对象具有一组特定的属性(但没有指定该对象应该是什么类型)。
一种解决方案是创建一个具有代码期望的属性的新类,但是当我调用其他代码也需要具有(其他)属性的对象时,我必须创建越来越多的类。
一个较短的解决方案是创建一个通用类,然后在它的实例上设置属性(对于那些想使用 object
的实例而不是创建一个新类的人来说,这是行不通的,因为 object
实例不允许新属性)。
我想出的最后一个最短的解决方案是创建一个带有构造函数的类,该构造函数采用关键字参数,就像 dict
构造函数一样,然后将它们设置为属性:
class data:
def __init__(self, **kw):
for name in kw:
setattr(self, name, kw[name])
options = data(do_good_stuff=True, do_bad_stuff=False)
但我忍不住觉得我错过了一些明显的东西……难道没有内置的方法来做到这一点(最好在 Python 2.5 中支持)?
原文由 Blixt 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用
__dict__
可以稍微简化原始代码:在 Python 3.3 及更高版本中,此语法由
types.SimpleNamespace
类提供。