所以我有一个具有很多属性的类。有没有办法让这个类的行为能够将它作为** kwarg传递给函数?
class Foo ( object ) :
def __init__( self ) :
self.a = 'a'
self.b = 'b'
foo = Foo()
somefunc(**foo)
我找不到合适的操作员来重载。
非常感谢!
答案 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
是内置的。