python - 如何将这部分代码提取到一些可重用的方法中?
问题描述
我有几种外观相同的方法,我想将它们重构为一种通用使用方法。怎么做?'assert_all_items_and_rows_for' 只有一件事不同。
def assert_all_items_and_rows_when_index_is_0(config, index, item, row, asserts):
if index == 0:
def_platforms = config["pl"]
platforms = ["gp", "ios", "win32"]
compare_name_from_definition_to_excel_name_for_platforms(config, def_platforms, platforms, row)
assert_all_items_and_rows_for_boos(item, row)
def assert_all_items_and_rows_when_index_is_0(config, index, item, row, asserts):
if index == 0:
def_platforms = config["pl"]
platforms = ["gp", "ios", "win32"]
compare_name_from_definition_to_excel_name_for_platforms(config, def_platforms, platforms, row)
assert_all_items_and_rows_for_ann(item, row)
def assert_all_items_and_rows_when_index_is_0(config, index, item, row, asserts):
if index == 0:
def_platforms = config["pl"]
platforms = ["gp", "ios", "win32"]
compare_name_from_definition_to_excel_name_for_platforms(config, def_platforms, platforms, row)
assert_all_items_and_rows_for_gem(item, row)
或者也许可以使用这样的东西:
def assert_all_items_and_rows_when_index_is_0(config, index, item, row, asserts):
if asserts is "boos":
if index == 0:
def_platforms = config["platforms"]
platforms = ["gp", "ios", "win32"]
compare_name_from_definition_to_excel_name_for_platforms(config, def_platforms, platforms, row)
assert_all_items_and_rows_for_boos(item, row)
elif asserts is "gem":
if index == 0:
def_platforms = config["platforms"]
platforms = ["gp", "ios", "win32"]
compare_name_from_definition_to_excel_name_for_platforms(config, def_platforms, platforms, row)
assert_all_items_and_rows_for_gem(item, row)
else:
raise Exception('wrong parameter')
解决方案
您可以将不同的断言函数作为参数传递。例如:
def assert_all_items_and_rows_when_index_is_0(config, index, item, row, asserts, assert_function):
if index == 0:
def_platforms = config["pl"]
platforms = ["gp", "ios", "win32"]
compare_name_from_definition_to_excel_name_for_platforms(config, def_platforms, platforms, row)
assert_function(item, row)
并像这样称呼它们(我在前 5 个参数中放了 None,保留你所拥有的。):
assert_all_items_and_rows_when_index_is_0(None, None, None, None, None, assert_all_items_and_rows_for_boos)
assert_all_items_and_rows_when_index_is_0(None, None, None, None, None, assert_all_items_and_rows_for_ann)
assert_all_items_and_rows_when_index_is_0(None, None, None, None, None, assert_all_items_and_rows_for_gem)
推荐阅读
- docker - 在 docker-compose 构建期间将数据加载到 redis
- sql - React 登录表单抛出错误“发送到客户端后无法设置标题”
- python - 需要通过 twilio 中的 whatsapp 位置保存经纬度发送
- sql - 在执行期间修改查询结果 - 删除额外的“/”
- javascript - 如何在每个调用react redux中附加数据
- c# - 如何使用 ASP.NET MVC 将数据从视图文本框传递到控制器
- java - 无法获取 JDBC 连接/事务未处于活动状态
- javascript - Javascript sum 动态 django rest 框架条目
- r - 如何根据其他变量标记/删除特定重复项
- android - MPAndroidChart,x轴线和网格线重叠?