2012-05-30 13 views

उत्तर

17

हाँ यह मान्य है। कक्षा को उस समय परिभाषित किया जाता है जब आप ऑब्जेक्ट बनाते हैं और returnTest विधि को कॉल करते हैं।

In [2]: x = Test() 

In [3]: y = x.returnTest() 

In [4]: y 
Out[4]: <__main__.Test instance at 0x1e36ef0> 

In [5]: 

हालांकि, ऐसे मामलों में जहां एक विधि एक कारखाने की तरह काम करता है, आप classmethod डेकोरेटर के उपयोग पर विचार करना चाह सकते हैं। जब विरासत और अन्य परेशानियां रास्ते में आती हैं, तो इससे मदद मिल सकती है।

1

हां, यह मान्य है। returnTest इसे तब तक नहीं चलाया जाएगा जब तक इसे कॉल नहीं किया जाता है। यह एक अनंत लूप नहीं बनाता है, क्योंकि नई बनाई गई वस्तु पर विधि को नहीं कहा जाता है।

0

हां। यह एक वैध पायथन कोड है। कई प्रोग्रामिंग भाषा परिभाषित कक्षा के एक उदाहरण को वापस करने की अनुमति देती हैं। सिंगलटन पैटर्न पर विचार करें।

0

हां, यह काम करता है लेकिन ऐसा लगता है कि returnTest() हमेशा टेस्ट का एक ही उदाहरण है।

class Test: 
    def __init__(self): 
    self.number = 5 

    def returnTest(self): 
    return Test() 


t = Test() 
print t 
print t.returnTest() 
print t.returnTest() 


$ python te.py 
<__main__.Test instance at 0xb72bd28c> 
<__main__.Test instance at 0xb72bd40c> 
<__main__.Test instance at 0xb72bd40c> 

यह पायथन 2.7 और 3.2 के लिए सच है। @classmethod ने कोई फर्क नहीं पड़ता। दिलचस्प बात यह PyPy एक अलग उदाहरण हर बार रिटर्न:

$ pypy te.py 
<__main__.Test instance at 0xb6dcc1dc> 
<__main__.Test instance at 0xb6dcc1f0> 
<__main__.Test instance at 0xb6dcc204> 
+10

क्योंकि अगर आप ऐसा नहीं करते हैं, यह कचरा एकत्र किया जा सकता है और यह हो सकता है आप के लिए लगता है कि एक ही उदाहरण t.returnTest() परिणाम भंडारण का प्रयास करें वापस कर दिया गया है, लेकिन यह केवल वही पता है, पुनर्नवीनीकरण। – kasyc

+2

यह एक अच्छा विचार है। परिणामों को एक सूची में संग्रहीत करना विभिन्न वस्तुओं को बनाना जारी रखता है। –

+1

मेरा +1 kasyc पर। मैं विंडोज़ पर पायथन 2.7.1 का उपयोग कर रहा हूं। संदर्भ संग्रहीत किए बिना, मैं कसीक द्वारा वर्णित कचरा एकत्रित स्थान का पुन: उपयोग/रीसाइक्लिंग भी देख सकता हूं। – pepr

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