2015-10-27 9 views
5

क्या यह __init__.py फ़ाइल में परिभाषित कक्षा रखने के लिए खराब अभ्यास माना जाता है? मेरे पास एक मामला है जो टैक्स कैलकुलेटर के समान है। मैं एक कैलकुलेटर वर्ग और फिर राज्य विशिष्ट कर कैलकुलेटर कक्षाओं का एक सेट रखना चाहता हूं जो कैलकुलेटर वर्ग आंतरिक रूप से संदर्भित करता है। कुछ की तरह:पायथन __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

मुझे यकीन नहीं है कि यह वह पूरा समाधान है जिसे आप ढूंढ रहे हैं, लेकिन निम्नलिखित स्टैक ओवरफ्लो पोस्ट में इसका एक अच्छा स्पष्टीकरण है कि इसका उपयोग आमतौर पर किया जाता है। http://stackoverflow.com/a/18979314/4194964 मॉड्यूल स्तर चर के बारे में बात करता है और "स्पष्ट से बेहतर स्पष्ट" दर्शन का उल्लंघन करने से बचने के लिए __init__.py फ़ाइल पतली होनी चाहिए –

उत्तर

3

आमतौर __init__.py फ़ाइल अपने पैकेज प्रारंभ करने, आयात सामान की तरह, अपने रास्ते पर स्थान जोड़ने के लिए, संस्करणों को परिभाषित करने या __all__ साथ बातें बेनकाब प्रयोग किया जाता है, लेकिन अक्सर यह भी खाली है। हालांकि मैं आपको बड़ी कक्षाओं/कार्यों को अपनी फाइलों को देने की सलाह देता हूं। यह बहुत अधिक रखरखाव योग्य है।

संबंधित मुद्दे