2015-10-27 10 views
5

クラスを__init__.pyファイルで定義することは悪い習慣と考えられますか?税金計算機に似たケースがあります。私は、電卓クラスと、その後、電卓クラスが内部的に参照する州固有の税金計算クラスのセットを持っていたいと思います。ような何か:Python __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) 

を悪い習慣かどうか、実際にPython的と考えていることですか?

+2

これはあなたが探している完全な解決策であるかどうかはわかりませんが、以下のStackoverflow投稿はよく使われている方法をよく説明しています。 http://stackoverflow.com/a/18979314/4194964 モジュールレベルの変数と、明示的ではない暗黙的な考え方に違反しないように、__init__.pyファイルをどのように細くすべきかについての議論 –

答えて

3

通常、ファイルは、インポート物などのパッケージを初期化するために使用されます。パスに場所を追加したり、バージョンを定義したり、__all__で物を公開したりします。 しかし、より大きなクラス/関数には独自のファイルを与えることをお勧めします。はるかに保守的です。

関連する問題