2008-08-29 12 views
8

क्या कुछ भाषाओं में पाइथन डिस्क्रिप्टर प्रोटोकॉल लागू किया गया है? यह आपके युक्त वर्ग के कार्यान्वयन को फूलाए बिना मॉड्यूलरिटी/इंकापुलेशन बढ़ाने का एक अच्छा तरीका प्रतीत होता है, लेकिन मैंने कभी भी किसी अन्य भाषा में इसी तरह की बात नहीं सुनी है। क्या यह लुकअप ओवरहेड की वजह से अन्य भाषाओं से अनुपस्थित है?पाइथन डिस्क्रिप्टर प्रोटोकॉल एनालॉग अन्य भाषाओं में?

उत्तर

4

मैंने प्रत्यक्ष प्रत्यक्ष समकक्ष के बारे में नहीं सुना है। आप शायद मैक्रोज़ के साथ एक ही प्रभाव प्राप्त कर सकते हैं, खासकर लिस्प जैसी भाषा में जिसमें अत्यधिक शक्तिशाली मैक्रोज़ हैं।

मैं बिल्कुल आश्चर्य नहीं यदि अन्य भाषाओं कुछ इसी तरह शामिल करने के लिए शुरू करते हैं, क्योंकि यह इतना शक्तिशाली है जाएगा।

0

रूबी और सी # दोनों को आसानी से आप एक विशेषता के लिए गेटर/सेटर तरीकों का उल्लेख करते समय ज्यादा अजगर की तरह से accessors बना सकते हैं। हालांकि, यह स्वाभाविक रूप से आपको अन्य तरीकों से पाइथन की अनुमति के तरीके के लिए कोड लिखने के लिए डिज़ाइन नहीं किया गया है। प्रैक्टिस में, मुझे यकीन नहीं है कि यह कितना मायने रखता है, क्योंकि हर बार जब मैंने वर्णनकर्ता प्रोटोकॉल के माध्यम से परिभाषित एक विशेषता देखी है, इसे उसी वर्ग में लागू किया गया है।

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

शब्द "डेकोरेटर" खुद वास्तव में प्रसिद्ध "डिजाइन पैटर्न" पुस्तक में वर्णित एक डिजाइन पैटर्न का नाम है। विकिपीडिया लेख डेकोरेटर उपयोग के विभिन्न प्रोग्रामिंग भाषाओं में कई उदाहरण दिए गए हैं: http://en.wikipedia.org/wiki/Decorator_pattern

हालांकि, उस लेख में सज्जाकार वस्तु उन्मुख; उनके पास एक पूर्वनिर्धारित इंटरफ़ेस को लागू करने वाले वर्ग हैं जो किसी अन्य मौजूदा वर्ग को किसी भी तरह से व्यवहार करते हैं, आदि। पाइथन सजावट किसी अन्य फ़ंक्शन के साथ रनटाइम पर फ़ंक्शन को प्रतिस्थापित करके कार्यात्मक तरीके से कार्य करती हैं, जिससे आप उस फ़ंक्शन को प्रभावी रूप से संशोधित/प्रतिस्थापित कर सकते हैं, कोड डालें आदि।

यह जावा दुनिया में पहलू-ओरिएंटेड प्रोग्रामिंग के रूप में जाना जाता है, और एस्पेक्टजे जावा कंपाइलर आपको इन प्रकार की चीजों को करने और जावा बाइटकोड में अपने AspectJ कोड (जो जावा का सुपरसेट है) संकलित करने देता है।

मैं के साथ सी # या रूबी काफी परिचित को पता है कि सज्जाकार के अपने संस्करण होगा नहीं हूँ।

+0

[वर्णनकर्ता प्रोटोकॉल] (http://docs.python.org/ref/descriptors.html) के रूप में [डेकोरेटर पैटर्न] (http://www.python.org/dev/peps/ समान नहीं है पेप्टन में पेप -0318 /) - मैं ऑब्जेक्ट इंस्टेंस को अन्य ऑब्जेक्ट की विशेषता में बदलने की क्षमता का जिक्र कर रहा हूं जो गतिशील रूप से "प्रॉक्सी" है। – cdleary

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