首页 > 解决方案 > 如何将这部分代码提取到一些可重用的方法中?

问题描述

我有几种外观相同的方法,我想将它们重构为一种通用使用方法。怎么做?'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')

标签: python

解决方案


您可以将不同的断言函数作为参数传递。例如:

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)

推荐阅读