Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重构只使用导入函数的不同版本的代码的最佳方法_Python_Refactoring - Fatal编程技术网

Python 重构只使用导入函数的不同版本的代码的最佳方法

Python 重构只使用导入函数的不同版本的代码的最佳方法,python,refactoring,Python,Refactoring,我有一些类似于下面代码的代码 import food.data.dairy.taste_extract as dairy_extract import food.data.fruit.taste_extract as fruit_extract import food.data.vegetable.taste_extract as vegetable_extract def get_taste(food): """ Depending on wh

我有一些类似于下面代码的代码

import food.data.dairy.taste_extract as dairy_extract
import food.data.fruit.taste_extract as fruit_extract
import food.data.vegetable.taste_extract as vegetable_extract


def get_taste(food):
    """
    Depending on what the food type is, use the category 
    specific function to get the taste of that particular food
    """
    if food.type == 'dairy':
        taste = dairy_extract(food)
    elif food.type == 'fruit':
        taste = fruit_extract(food)
    elif food.type == 'vegetable':
        taste = vegetable_extract(food)
    else:
        raise NotImplementedError 
    
    return taste

基本上,我是在尝试返回给定食物的味道。根据食物类型,在脚本顶部导入的函数中有自定义逻辑,这些函数将返回特定食物的味道。假设这些函数中的特定逻辑不一定相似到足以将它们包装成单个函数。我想知道有哪些最好的方法可以使它更干净。在我的实际用例中,我没有3条IF语句(和导入),但有10条,而且还在增长,所以在这个文件的顶部有很多IF语句和导入。我知道我可以用这样的字典映射替换IF-ELSE语句
mapping={'dairy':dairy'u extract,'vegeture':vegeture'u extract,'fruit':fruit'u extract}
,然后得到
taste=mapping[food.type]
,但这仍然让很多丑陋的进口产品处于顶端。是否有一种好的/通用的重构方法,以减少此文件顶部的导入数量,同时减少IF-ELSE语句的数量?

所有导入的格式是否相同,即
food.data.something.taste\u extract
?你有没有考虑过用方法将它们重构成类?这实际上是解决这个问题的一个很好的方法,尽管在我正在处理的实际案例中,需要对各种复杂的代码进行重大重构。但是,事后看来,这可能是组织这个代码库的一种很好的方式,并且可以解决这里没有提到的许多其他问题。