पायथन मेटाक्लास और कक्षा सजावट के बीच मुख्य अंतर क्या हैं? क्या मैं एक के साथ कुछ कर सकता हूं लेकिन दूसरे के साथ नहीं?पाइथन मेटाक्लास बनाम कक्षा सजावट
उत्तर
सजावटी बहुत अधिक, अधिक सरल और अधिक सीमित हैं - और इसलिए जब भी वांछित प्रभाव मेटाक्लास या कक्षा सजावट के साथ प्राप्त किया जा सकता है तो प्राथमिकता दी जानी चाहिए।
आप किसी भी कक्षा सजावट के साथ क्या कर सकते हैं, आप निश्चित रूप से एक कस्टम मेटाक्लास के साथ कर सकते हैं (केवल "सजावटी कार्य" की कार्यक्षमता लागू करें, यानी, वह वर्ग वस्तु लेता है और इसे संशोधित करता है, पाठ्यक्रम में मेटाक्लास के __new__
या __init__
जो क्लास ऑब्जेक्ट बनाते हैं! -)।
कस्टम मेटाक्लास में आप कई चीजें कर सकते हैं लेकिन सजावट में नहीं (जब तक कि सजावटी आंतरिक रूप से उत्पन्न नहीं होता है और कस्टम मेटाक्लास लागू करता है - लेकिन) यह धोखाधड़ी है; -) ... और फिर भी, पायथन 3, ऐसी चीजें हैं जो आप केवल कस्टम मेटाक्लास के साथ ही कर सकते हैं, तथ्य के बाद नहीं ... लेकिन यह आपके प्रश्न का एक बहुत ही उन्नत उप-आला है, इसलिए मुझे सरल उदाहरण दें)।
उदाहरण के लिए, यदि आप एक वर्ग वस्तु X
ऐसे print X
(या अजगर 3 निश्चित रूप से print(X)
में ;-) को प्रदर्शित करता है कि peekaboo!
बनाने के लिए चाहते हैं। आप कस्टम मेटाक्लास के बिना संभवतः ऐसा नहीं कर सकते हैं, क्योंकि __str__
का मेटाक्लास का ओवरराइड यहां महत्वपूर्ण अभिनेता है, यानी आपको के कस्टम मेटाक्लास में def __str__(cls): return "peekaboo!"
की आवश्यकता है।
ही सब जादू तरीकों, अर्थात् पर लागू होता है, संचालन के सभी प्रकार के रूप में लोगों को अपने उदाहरणों है, जो जादू तरीकों का उपयोग के रूप में कक्षा में परिभाषित करने के लिए लागू, करने के लिए विरोध के रूप में वर्ग वस्तु ही करने के लिए लागू (करने के लिए - क्लास ऑब्जेक्ट पर ऑपरेशन मेटाक्लास में परिभाषित अनुसार जादू विधियों का उपयोग करते हैं)।
- 1. पायथन कक्षा सजावट
- 2. कक्षा सजावट करने वाले?
- 3. पायथन कक्षा सजावट तर्क
- 4. पायथन: सजावट को कक्षा
- 5. मेटाक्लास
- 6. मेटाक्लास
- 7. सजावट डिजाइन पैटर्न बनाम विरासत?
- 8. पाइथन सजावट सर्वोत्तम अभ्यास, एक वर्ग बनाम एक फ़ंक्शन
- 9. पायथन सजावट और कक्षा विरासत
- 10. मल्टीप्रोसेसिंग के साथ पाइथन सजावट
- 11. मेटाक्लास
- 12. रेजोज़िबिलिटी बनाम सजावट के डिजाइन पैटर्न चेन सजावट
- 13. पाइथन कक्षा
- 14. पाइथन कक्षा
- 15. कक्षा सजावट, विरासत, सुपर(), और अधिकतम रिकर्सन
- 16. एक सजावट का उपयोग कर पाइथन लॉगिंग
- 17. पायथन मेटाक्लास और मॉडग्रामर
- 18. मेटाक्लास को पैरामीट्रिज विरासत
- 19. रूबी मेटाक्लास पागलपन
- 20. मेटाक्लास और __slots__?
- 21. टेक्स्ट-सजावट: अंडरलाइन बनाम सीमा-नीचे
- 22. कक्षा कक्षा - उदाहरण बनाम कक्षा के तरीके
- 23. पायथन में एक वैध कक्षा सजावट कैसे लिखें?
- 24. पाइथन में कक्षा विरासत
- 25. कक्षा में एक सजावट को परिभाषित करना, जो वर्ग परिभाषा
- 26. पायथन: मेटाक्लास सभी तरह से नीचे
- 27. सजावट
- 28. विधि बनाम फंक्शन बनाम प्रक्रिया बनाम कक्षा?
- 29. जावा में पायथन जैसी सजावट?
- 30. मेटाक्लास मिक्सिन या चेनिंग?
प्रतिष्ठित साथी देशवासियों से दिलचस्प जवाब =) – gpilotino
हाय गिनो, हमेशा विशेष रूप से एक सहयोगी की मदद करने के लिए खुश हैं ;-)। –
अच्छा .. यह 4 साल हो गया है और मुझे यह सवाल Google पर मिला। मैं बस आपके उदाहरण के बारे में एक नोट बनाना चाहता हूँ। मैंने एक सजावटी 'foo (cls) को परिभाषित किया है जिसमें 2 कथन हैं: 'cls .__ str__ = lambda self:" peekaboo! "' और उसके बाद' वापसी cls 'के ठीक बाद, और यह वास्तव में काम किया - मैंने ' एक जटिल मेटाक्लास के बजाय सजावटी के साथ कुछ वर्ग की __str__' विधि .. मैं बस इसे नोट करना चाहता था, और शायद कुछ जानना कि मुझे कुछ याद आ रहा है या नहीं। – rboy