使一个类在python中表现得像一堆关键字参数

时间:2010-07-30 19:36:41

标签: python

所以我有一个具有很多属性的类。有没有办法让这个类的行为能够将它作为** kwarg传递给函数?

class Foo ( object ) :
    def __init__( self ) :
         self.a = 'a'
         self.b = 'b'

foo = Foo()
somefunc(**foo)

我找不到合适的操作员来重载。

非常感谢!

2 个答案:

答案 0 :(得分:2)

**kwargs期待一本字典;让您的班级支持dict操作的最简单方法( ed:,除了直接继承自dict,这也有效)是继承collections.MutableMapping mixin ,您需要定义__setitem____getitem____delitem__,并免费为您提供dict界面的其余部分。

您可以保留内部dict个属性,将这三个函数传递给它,另外实现__setattr____getattr__以支持属性样式访问。这是一个recipe,可以做出类似于你正在寻找的东西 - 你需要小心弄乱这两个。

答案 1 :(得分:0)

我认为你想要的是vars

>>> def somefunc(**kwargs):
...     from pprint import pprint
...     pprint(kwargs)
...
>>> somefunc(**vars(foo))
{'a': 'a', 'b': 'b'}

不需要以这种方式过载任何东西。 vars是内置的。