2015-10-27 15 views
5

Czy uważa się za złą praktykę zdefiniowanie klasy w pliku __init__.py? Mam sprawę podobną do kalkulatora podatkowego. Chcę mieć klasę kalkulatora, a następnie zestaw klas kalkulatora podatkowego, które klasa kalkulatora odwołuje się wewnętrznie. Coś jak:Python __init__.py i klasy

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) 

struktura katalogów myślę o wygląda następująco:

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

A __init__.py mieści funkcję "TaxCalculator".

Zajęcia będą odwołujące kalkulatorów tj:

from calculators import TaxCalculator 

calculator = TaxCalculator().calculate(purchase_info) 

Czy to uważane złą praktyką lub nie naprawdę pythonowy?

+2

Nie jestem pewien, czy jest to kompletne rozwiązanie, którego szukasz, ale następujący post Stackoverflow ma dobre wyjaśnienie, w jaki sposób jest on zwykle używany. http://stackoverflow.com/a/18979314/4194964 Rozmowy na temat zmiennych na poziomie modułu i tego, jak plik __init__.py powinien być cienki, aby uniknąć naruszenia zasady "wyraźniej jest lepszy niż niejawny" –

Odpowiedz

3

Zazwyczaj plik __init__.py służy do inicjowania pakietu, na przykład importowania, dodawania lokalizacji do ścieżki, definiowania wersji lub wyświetlania rzeczy za pomocą __all__, ale często jest również pusty. Jednak zalecam, aby dawać większe klasy/funkcje własnych plików. To znacznie łatwiejsze do utrzymania.

Powiązane problemy