在Python中以编程方式调用方法链

gev0vcfq  于 2023-03-31  发布在  Python
关注(0)|答案(2)|浏览(147)

我有一个简单的方法,需要根据字典列表进行链接。下面是示例。

e = Example()
instance_copy = e.perform_action("A, "Good")
                 .perform_action("B", "Very Good")
                 .perform_action("C", "Poor")

现在,我想用dictionary给出的输入来自动化这个流程

e = Example()
d = {'A': 'Good', 'B': 'Very Good', 'C': 'Poor', 'D': 'Very Poor'}

# chain methods using e.perform_action(k, v) from dict `d.items()` identical to above

如何在Python中实现这一点?
PS:请忽略类实现,但我正在寻找方法链接的解决方案,可以通过编程方式无限大小(限制为dict的大小)链接。

wgx48brx

wgx48brx1#

现在,我想用dictionary给出的输入来自动化这个流程
要做到这一点的方法是删除方法链。示例:

instance_copy = e
for k, v in my_dict:
    instance_copy = instance_copy.perform_action(k, v)

方法链与您所描述的数据驱动程序流本质上是对立的。
然而,请注意,根据Python实现和版本的不同,字典的迭代顺序可能与插入顺序不同,因此如果各种方法实现的顺序很重要,那么你需要控制它。为了一直回到Python 2.7,当问题被标记时,你可能需要一个列表而不是字典。例如:

e = Example()
param_lists = [('A', 'Good'), ('B', 'Very Good'), ('C', 'Poor'), ('D': 'Very Poor')]
instance_copy = e
for k, v in param_lists:
    instance_copy = instance_copy.perform_action(k, v)
vd2z7a6w

vd2z7a6w2#

你可以使用functools.reduce

e = Example()
d = {'A': 'Good', 'B': 'Very Good', 'C': 'Poor', 'D': 'Very Poor'}
from functools import reduce
instance_copy = reduce(lambda acc, curr: acc.perform_action(*curr), d.items(), e)

相关问题