2012-08-13 26 views
6

में कार्य अगर मैं कई कार्यों के साथ एक वर्ग है: यदि मैं 'उदाहरण' के कई उदाहरण बनापायथन: एक वर्ग और स्मृति

class Example: 

    def func1(self): 
     print 'Hi1' 
    def func2(self): 
     print 'Hi2' 
    def func3(self): 
     print 'Hi3' 

, प्रत्येक उदाहरण दुकान कक्षा में कार्यों का अपना प्रतियां करता है ? या क्या पाइथन के पास केवल एक बार परिभाषा को स्टोर करने का एक स्मार्ट तरीका है और जब भी एक उदाहरण कक्षा में किसी फ़ंक्शन का उपयोग करता है तो इसे देखते हैं?

इसके अलावा, स्थिर कार्यों के बारे में क्या? क्या कक्षा प्रत्येक स्थिर कार्य की केवल एक प्रति रखती है?

+0

मुझे यकीन नहीं है कि मैं प्रदर्शन में अंतर को समझता हूं जो इसका अर्थ होगा। – rsegal

+0

मैं कक्षा के लाखों उदाहरणों को तुरंत शुरू कर रहा हूं, इसलिए मुझे समझने की जरूरत है कि स्मृति कैसे प्रभावित होगी। –

उत्तर

12

कक्षा को तुरंत चालू करते समय, कोई नई फ़ंक्शन ऑब्जेक्ट नहीं बनाई जाती है, न तो उदाहरण विधियों के लिए और न ही स्थैतिक तरीकों के लिए। obj.func1 के माध्यम से एक इंस्टेंस विधि का उपयोग करते समय, "बाध्य विधि" नामक एक नया रैपर ऑब्जेक्ट बनाया जाता है, जिसे केवल आवश्यकतानुसार ही रखा जाएगा। रैपर ऑब्जेक्ट हल्का वजन है और मूल रूप से अंतर्निहित फ़ंक्शन ऑब्जेक्ट और उदाहरण के लिए एक सूचक होता है (जिसे self पैरामीटर के रूप में पारित किया जाता है जब फ़ंक्शन कहा जाता है)।

ध्यान दें कि staticmethod का उपयोग करना हमेशा पाइथन में एक गलती है। यह एक ऐतिहासिक गलती के लिए अपने अस्तित्व का बकाया है। यदि आपको लगता है कि आपको एक स्थिर विधि की आवश्यकता है तो आप आमतौर पर मॉड्यूल-स्तरीय फ़ंक्शन चाहते हैं।

+0

अच्छी तरह से रख दिया और समझा जा सकता - staticmethod के बारे में अच्छी टिप्पणी के रूप में अच्छी तरह से –

+0

भी ध्यान रखें कि कार्यों वस्तुओं खुद को (और करते हैं) शेयर बाईटकोड, और IIRC केवल मेटाडाटा (नाम, मॉड्यूल, docstring, पर कब्जा कर लिया चर, आदि) का एक सा जोड़ने के ऊपर उस। – delnan

+0

@ डेलनान: यह केवल * स्थानीय * फ़ंक्शन के लिए सच है, यानी कार्यों के अंदर परिभाषित फ़ंक्शंस। कक्षा निकाय केवल एक बार निष्पादित किया जाता है, और वर्ग निकाय के कार्यों के लिए, फ़ंक्शन ऑब्जेक्ट्स और कोड ऑब्जेक्ट्स के बीच एक-से-एक पत्राचार होता है। –

0

कार्य स्थिर और गैर स्थैतिक दोनों वर्ग में "संग्रहीत" हैं।