Python的__init__.py和类

5

在 __init__.py 文件中定义一个类是否被认为是不好的实践?我有一个类似于税收计算器的情况。我想要一个计算器类,然后是一组州特定的税收计算器类,计算器类内部引用这些类。类似于:

class TaxCalculator():

    def __init__(self):
        self.ca_tax_calculator = CATaxCalculator()
        self.ny_tax_calculator = NYTaxCalculator()

    def get_tax_calculator_for_state(self, state):
        tax_calculator = None
        if state == "CA":
            tax_calculator = self.ca_tax_calculator
        else:
            tax_calculator = self.ny_tax_calculator
        return tax_calculator

    def calculate(self, purchase_info):
        return self.get_tax_calculator_for_state(purchase_info.state).calculate(purchase_info.amount)

我考虑的目录结构如下所示:

/calculators/__init__.py
/calculators/ca.py
/calculators/ny.py

__init__.py中包含了"TaxCalculator"函数。

类会引用计算器,例如:

from calculators import TaxCalculator

calculator = TaxCalculator().calculate(purchase_info)

这被认为是不好的实践,或者说不太符合Pythonic风格吗?

2
我不确定这是否是您正在寻找的完整解决方案,但以下Stackoverflow帖子对其通常使用方式有很好的解释。https://dev59.com/kHRB5IYBdhLWcg3w-8A9#18979314 讨论了模块级变量以及如何使__init__.py文件保持简洁,以避免违反“显式优于隐式”的哲学。 - Brian Cain
1个回答

3
通常,__init__.py文件用于初始化您的软件包,例如导入内容、将位置添加到路径、定义版本或使用__all__公开内容。但是,它通常也是空的。 然而,我建议您将更大的类/函数放在自己的文件中。这样更易于维护。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接