将生成器/模拟函数传递给遗留模块中的方法
Pass in a generator / mocking function to a method in a legacy module
在 Python 中,我有一个带有 legacy
方法的遗留模块 Utils
,如下所示:
@staticmethod
def legacy(users, some_data, other_data):
j=0
for _ in users.keys():
do_something([{'a': some_data[j], 'b': other_data[j]}])
j=j+1
我正在编写一个新逻辑,其中只有 users
和 some_data
存在,other_data
不存在。
我正在考虑传递一个 generator / 模拟方法,以便我可以这样做:
Utils.legacy(users, some_data, magic)
给定特定的 j
设置 {'b': magic[j]}
。
有没有办法使用生成器/一些模拟来实现 magic
?
备注:
- 无法更改遗留代码
- 上面的简单问题可以通过传入
dict
的用户规模来解决,但我正在寻找更通用的解决方案。
你只需要一个 class 和一个 __getitem__
方法,不对其参数施加任何限制。
class Foo(object):
def __getitem__(self, key):
pass
Utils.legacy(users, some_data, Foo())
将 pass
替换为 return foo
以获得您想要的任何占位符元素 foo
。
或者,再三考虑,使用 collections.defaultdict
。
from collections import defaultdict
Utils.legacy(users, some_data, defaultdict(lambda: None))
(或使用任何其他零参数函数提供默认值代替 lambda: None
。)
在 Python 中,我有一个带有 legacy
方法的遗留模块 Utils
,如下所示:
@staticmethod
def legacy(users, some_data, other_data):
j=0
for _ in users.keys():
do_something([{'a': some_data[j], 'b': other_data[j]}])
j=j+1
我正在编写一个新逻辑,其中只有 users
和 some_data
存在,other_data
不存在。
我正在考虑传递一个 generator / 模拟方法,以便我可以这样做:
Utils.legacy(users, some_data, magic)
给定特定的 j
设置 {'b': magic[j]}
。
有没有办法使用生成器/一些模拟来实现 magic
?
备注:
- 无法更改遗留代码
- 上面的简单问题可以通过传入
dict
的用户规模来解决,但我正在寻找更通用的解决方案。
你只需要一个 class 和一个 __getitem__
方法,不对其参数施加任何限制。
class Foo(object):
def __getitem__(self, key):
pass
Utils.legacy(users, some_data, Foo())
将 pass
替换为 return foo
以获得您想要的任何占位符元素 foo
。
或者,再三考虑,使用 collections.defaultdict
。
from collections import defaultdict
Utils.legacy(users, some_data, defaultdict(lambda: None))
(或使用任何其他零参数函数提供默认值代替 lambda: None
。)