【发布时间】:2022-02-17 00:38:02
【问题描述】:
我想创建一个类,像字典一样解压它的对象。
例如,使用字典可以做到这一点
foo = {
"a" : 1
"b" : 2
}
def bar(a,b):
return a + b
bar(**foo)
输出3
我希望能够做到这一点
class FooClass:
def __init__(self):
self.a = a
self.b = b
f = FooClass()
bar(**f)
并让它输出3
This 是我能找到的最相关的问题,但它没有解决这个问题,所以我认为这可能是不可能的。
目前我的解决方案是这样的:
class FooClass:
def __init__(self):
self.a = a
self.b = b
def to_dict(self):
return {
"a" : self.a,
"b" : self.b
}
f = FooClass()
bar(**f.to_dict())
【问题讨论】:
-
据我所知,这不太可能,除非您实际上是在继承
Mapping。否则它将类似于**vars(f)或**f.__dict__或**f.as_dict()。 -
@deceze 我会研究子类映射,谢谢!
-
@deceze 是this 的推荐答案,您推荐什么?"
-
@buran 第二个链接可能,第一个链接在我的问题中。那么**会在后台调用
keys函数吗?