2015-10-27 19 views
5

È considerata una cattiva prassi avere una classe definita in un file __init__.py? Ho un caso simile a un calcolatore delle imposte. Voglio avere una classe calcolatrice e quindi un insieme di classi di calcolatori fiscali specifici per stato che la classe calcolatrice fa riferimento internamente. Qualcosa di simile:Python __init__.py e classi

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) 

La struttura di directory Sto pensando di simile a questo:

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

E il __init__.py ospitato la funzione "TaxCalculator".

Classi sarebbe fare riferimento alle calcolatrici cioè:

from calculators import TaxCalculator 

calculator = TaxCalculator().calculate(purchase_info) 

È che pratica male considerato o no realmente Pythonic?

+2

Non sono sicuro che questa sia la soluzione completa che stai cercando, ma il seguente post StackOverflow ha una buona spiegazione di come viene tipicamente utilizzato. http://stackoverflow.com/a/18979314/4194964 Parla delle variabili a livello di modulo e di come il file __init__.py dovrebbe essere sottile per evitare di violare la filosofia "esplicita è meglio di quella implicita" –

risposta

3

In genere il file __init__.py viene utilizzato per inizializzare il pacchetto, come materiale di importazione, aggiungere posizione al percorso, definire versioni o esporre le cose con __all__, ma spesso è anche vuoto. Tuttavia ti consiglio di assegnare classi/funzioni più grandi ai propri file. È molto più gestibile.

Problemi correlati