2010-10-05 12 views
6

सामान्य रूप से, क्या __new__ विधि से कोई भी वापस लौटने के लिए उचित नहीं है यदि कक्षा के उपयोगकर्ता को पता है कि कभी-कभी निर्माता किसी का मूल्यांकन नहीं करेगा?क्या यह वापस करना ठीक है __new__ से कोई नहीं?

प्रलेखन यह अवैध नहीं है, और मुझे कोई तत्काल समस्या नहीं दिखाई दे रही है (क्योंकि __init__ को कॉल नहीं किया जा रहा है, कोई भी प्रश्न में कस्टम क्लास का उदाहरण नहीं है!)।

class MyNumber(int): 
    def __new__(cls, value): # value is a string (usually) parsed from a file 
     if value == 'N.A.': 
      return None 
     return int.__new__(cls, value) 

उत्तर

7

यह: लेकिन मैं के बारे में

  1. चिंतित है कि क्या यह अन्य अप्रत्याशित संबंधी समस्याएं हो सकती
  2. कि क्या यह एक अच्छा प्रोग्रामिंग अभ्यास है कंस्ट्रक्टर्स के लिए

विशिष्ट उदाहरण लौट कोई नहीं कर रहा हूँ अवैध नहीं यदि परिणाम के साथ अजीब कुछ भी नहीं किया जाता है, तो यह काम करेगा।

+1

या इसके बजाय, यह _will_ काम करता है। परिणाम के साथ लगभग कुछ भी दिलचस्प करने का प्रयास _will not_। लेकिन यह शायद बिंदु का हिस्सा है। – aaronasterling

3

आपको इससे बचना चाहिए। दस्तावेज उन चीजों को पूरी तरह से सूचीबद्ध नहीं करता है जो आपको नहीं करना चाहिए, लेकिन यह कहता है कि __new__ करना चाहिए: कक्षा का एक उदाहरण लौटाएं।

यदि आप कुछ मामलों में कोई नई वस्तु वापस नहीं करना चाहते हैं, तो अपवाद उठाएं।

+1

लेकिन दस्तावेज यह भी कहता है कि यदि कक्षा का एक उदाहरण वापस नहीं किया जाता है, तो __init__ नहीं कहा जाता है। मैंने इसे कक्षा के गैर-उदाहरण को वापस करने की इजाजत देकर पढ़ा। अपवादों के लिए, यह उपयोगकर्ता के लिए थोड़ा और काम है; सिर्फ यह जांचने के बजाय कि ऑब्जेक्ट कोई नहीं है, उन्हें अपवादों को आजमाने और पकड़ने की आवश्यकता है। इस मामले में ValueError के लिए – max

+0

+1। – Daenyth

+0

या उपयोगकर्ता के लिए यह थोड़ा कम काम है, यदि उपयोगकर्ता एक अपवाद हैंडलर (जो अपवादों का पूरा बिंदु है) के साथ कोड के ब्लॉक के लिए त्रुटियों को संभालने की अपेक्षा कर रहा है। याद रखने के लिए दो चीजें: पाइथन में त्रुटि प्रबंधन आमतौर पर अपवादों के माध्यम से किया जाता है (नहीं * हमेशा *, लेकिन अधिकांश समय); और एक कन्स्ट्रक्टर * नहीं * एक वस्तु का निर्माण * असाधारण व्यवहार * की परिभाषा है। –

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