是否可以根据变量从大量模块中选择函数(如果变量太多,则不使用)?

2024-04-16 06:03:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个人力资源计算程序,每个国家的税收/福利计算有很大的不同,所以我为每个国家都有单独的模块,例如USA_HR_Functions.pyJapan_HR_Functions.py,等等(总共有36个)。你知道吗

在每个模块中,我都有一些功能(同名的功能)-工资、税收、福利等

由此,我编写了一个循环,遍历每个员工并检查他们的信息,以确定要使用的计算

  • employee_1在日本,因此它将使用Japan_HR_Functions.salary()Japan_HR_Functions.tax()等。

  • employee_2在美国,因此它将使用USA_HR_Functions.salary()USA_HR_Functions.tax()等。

我已经把所有的东西都写出来了,如果我一次只写一个国家的话就行了。意味着所有的东西都使用一个模块的函数。我想一次把所有的员工都检查一遍。你知道吗


Tags: 模块py程序功能员工employeehr国家
3条回答

虽然Jay的建议只适用于一个函数,但我不建议使用它,因为您必须为每个函数(工资、税收等)进行设置。你知道吗

我将使用此设置:

countries = ["japan", "USA"]
stringToCountry = {
    "japan": Japan(),
    "USA": USA(),
}

for country in countries:
    countryObj = stringToCountry.get(country)
    salary = countryObj.salary(4)

这样,您就可以使用dict中带有get函数的字符串遍历所有国家。
我做过这样的东西:

class Japan:
    def salary(self, value):
        return 2 * value


class USA:
    def salary(self, value):
        return 3 * value

希望对你有帮助。你知道吗

OO方法是为employee(和其他业务对象)管理创建(可能是抽象的)类,声明用于计算薪资、税收、福利等的所有方法

然后在每个模块中,定义专门针对该国家(或国家组)的实现类。你知道吗

一旦这样做了,您就可以通过基类对雇员进行循环,OO魔术将选择正确的操作。你知道吗

一个能够创建employee对象的简单实现就是拥有一个由国家名称索引的实现类的映射。你知道吗

根据实际用例的复杂程度,这可能是过度使用或最易维护的方式。。。你知道吗

您可以使用字典将国家映射到函数:

country_to_salary = {
    'Japan': Japan_HR_Functions.salary,
    'USA':   USA_HR_Functions.salary,
    .
    .
    }

#Applying the dictionary
country_to_salary['Japan']()
# Runs Japan_HR_Functions.salary() 

相关问题 更多 >