2013-12-17 6 views
11

कक्षा के भीतर एक नई वस्तु बनाने के लिए कक्षा() या स्वयं .__ वर्ग __() का उपयोग करने के फायदे/नुकसान क्या हैं? क्या एक तरीका आम तौर पर दूसरे पर पसंद किया जाता है?कक्षा() बनाम स्वयं .__ वर्ग __() ऑब्जेक्ट बनाते समय?

यहां मैं जो बात कर रहा हूं उसका एक संक्षिप्त उदाहरण है।

class Foo(object):                
    def __init__(self, a):               
    self.a = a                 

    def __add__(self, other):              
    return Foo(self.a + other.a)             

    def __str__(self):                
    return str(self.a)               

    def add1(self, b):                
    return self + Foo(b)               

    def add2(self, b):                
    return self + self.__class__(b)            

उत्तर

10

self.__class__ एक उपवर्ग के प्रकार का उपयोग करता है, तो आप एक उपवर्ग उदाहरण से उस विधि को कॉल करेंगे।

का उपयोग वर्ग स्पष्ट रूप से जो कुछ भी वर्ग आप स्पष्ट रूप से निर्दिष्ट (स्वाभाविक रूप से)

उदा .:

class Foo(object): 
    def create_new(self): 
     return self.__class__() 

    def create_new2(self): 
     return Foo() 

class Bar(Foo): 
    pass 

b = Bar() 
c = b.create_new() 
print type(c) # We got an instance of Bar 
d = b.create_new2() 
print type(d) # we got an instance of Foo 
बेशक

का उपयोग करेगा, इस उदाहरण बहुत बेकार अन्य मेरी बात को प्रदर्शित करने के की तुलना में है। यहां एक वर्ग विधि का उपयोग करना बेहतर होगा।

+0

आह। यह समझ आता है। – Ben

+0

महान जवाब! जल्दी भी, +1। बीटीडब्ल्यू, अच्छी टोपी! – aIKid

+1

@ एआईकिड - मुझे लगता है कि स्टैक ओवरफ्लो टोपी क्रिसमस के समय के बारे में मेरी पसंदीदा चीजों में से एक है। हालांकि यह मजाकिया है ... मुझे वास्तविक समय में कपड़े पहनने का फैसला करने में कठिनाई नहीं होती है - स्टैक ओवरफ्लो टोपी पूरी तरह से एक और मामला है ... – mgilson

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