2010-07-24 17 views
40

मैं जानना चाहता हूं कि पाइथन पूरी तरह से ऑब्जेक्ट उन्मुख क्यों नहीं है। उदाहरण के लिए, यह निजी, सार्वजनिक, संरक्षित पहुंच स्तर संशोधक का समर्थन नहीं करता है।पायथन पूरी तरह से ऑब्जेक्ट उन्मुख क्यों नहीं है?

इस के फायदे और नुकसान क्या हैं? इन अभिव्यक्तियों से, पायथन किस अनुप्रयोग (डेस्कटॉप, वैज्ञानिक, वेब या अन्य) के लिए उपयुक्त है?

+29

क्या यह होमवर्क है? – extraneon

+6

पायथन लगभग हर चीज के लिए उपयुक्त है, जो हार्ड नंबर क्रंचिंग पर भरोसा नहीं करता है, लेकिन फिर भी आप इन हिस्सों को सी में लिख सकते हैं। Encapsulation गतिशील रूप से टाइप की गई भाषा में उपयोगी नहीं है। यह केवल जावा में संकलक का सहयोग करता है, आप प्रतिबिंब के माध्यम से इसे (और कभी-कभी इसकी आवश्यकता) कर सकते हैं। Encapsulation, IMHO, कोई सुरक्षा नहीं जोड़ता है, यह आपको केवल यह महसूस करता है कि जगह में और अधिक सुरक्षा है। –

+1

@extraneon: नहीं, बस जानने के लिए। @Wetzel: मैं आपके साथ सहमत हूं 'Encapsulation एक गतिशील रूप से टाइप की गई भाषा में उपयोगी नहीं है'। –

उत्तर

73

पायथन मजबूत encapsulation का समर्थन नहीं करता है, जो "ऑब्जेक्ट उन्मुख" शब्द से जुड़ी कई सुविधाओं में से एक है।

उत्तर केवल दर्शन है। Guido चीजों को छिपाना पसंद नहीं है, और पाइथन समुदाय में से कई उसके साथ सहमत हैं।

+8

+1, सही उत्तर। हालांकि मैं कहूंगा: पायथन * लागू नहीं करता है (सूचना छिपाने/encapsulation) *। obj._field उस मूर्खतापूर्ण पायथन कोड में "निजी" है जब तक आवश्यक नहीं है (डीआईआर() फ़ंक्शन, प्रतिबिंब, क्रमबद्धता, विरासत कोड की सीमा के आसपास हैक करना है जिसे बदला नहीं जा सकता है)। और पायथन उदा। से अधिक ओओ है जावा या सी ++ या सी #, क्योंकि कोई प्राइमेटिव नहीं है। – delnan

+0

@ डेलनान: आप सही हैं; पाइथन छुपा/encapsulation लागू नहीं करता है। यह * सी से अधिक * छिपाने/encapsulation का समर्थन नहीं करता है। वास्तव में, कोई प्रतिबिंब के साथ, सी पायथन से बेहतर छिपाने का समर्थन करता है! :-) –

+6

बस एफवाईआई: सी # के प्राइमेटिव वास्तव में सिस्टम से प्राप्त किए जाते हैं। वैल्यू टाइप, जो System.Object से लिया गया है। वास्तव में, सी # केवल एकमात्र सचमुच ओओ भाषा है जिसे मैं जानता हूं, उसमें सबकुछ एक वस्तु है। – Xenoprimate

1

मुझे लगता है कि पायथन को हाइब्रिड होने के लिए डिज़ाइन किया गया है। आप ऑब्जेक्ट उन्मुख या कार्यात्मक शैलियों में लिख सकते हैं।

ऑब्जेक्ट-ओरिएंटेशन के लक्षण अमूर्त, encapsulation, विरासत, और polymorphism हैं। इनमें से कौन सा पाइथन से गायब है?

ऑब्जेक्ट-ओरिएंटेशन एक निरंतरता है। हम कह सकते हैं कि स्मॉलटाक शुद्ध का सबसे शुद्ध है, और अन्य सभी पैमाने पर विभिन्न स्थानों पर कब्जा करते हैं।

कोई भी नहीं कह सकता कि 100% शुद्ध होने का मूल्य क्या है। छोटे-छोटे ऑब्जेक्ट-ओरिएंटेड कोड को उन भाषाओं में लिखना संभव है जो स्मॉलटाक नहीं हैं, पायथन शामिल हैं।

पाइथन उन सभी क्षेत्रों में उपयोगी है: वैज्ञानिक (NumPy), वेब (Django), और डेस्कटॉप।

3

मुझे विश्वास है कि पाइथन बहुत व्यावहारिक, व्यावहारिक भाषा से अधिक है।

अवधारणाओं को जो प्रस्ताव प्रदान करता है, उसे अवधारणाओं को "उचित ओओ डिजाइन" और सामान जैसी धार्मिक अवधारणाओं के बारे में बहुत अधिक विचार किए बिना रखा जाता है। यह उन लोगों के लिए एक भाषा है जिनके पास असली काम है।

मुझे लगता है कि पाइथन सभी प्रकार के वातावरण के लिए उपयुक्त है, हालांकि डेस्कटॉप एक एकल ढांचे की कमी के कारण थोड़ा मुश्किल है। सभी अनुप्रयोगों के लिए एक ढांचे का उपयोग करना आसान है, कम्प्यूटेशनल सामान, वेब सामग्री के लिए ट्विस्ट या Django, और डेस्कटॉप सामान के लिए WxWidgets या अन्य के लिए NumPy की तरह।

+1

वास्तव में पाइथन में लिखे गए गनोम के लिए एक नरक सॉफ़्टवेयर है, मैंने खुद को 11k लाइनें लिखी हैं, कोड केवल अविश्वसनीय पठनीय और रखरखाव योग्य है, विकास भी वास्तव में तेज़ है और लगभग हर चीज के लिए बाध्यियां हैं। लेकिन मुझे यह मानना ​​है कि जीटीके वास्तव में कभी-कभी बोझिल होता है। –

+0

पीईक्यूटी जाने का रास्ता है! नोकिया द्वारा पाइस्लाइड भी बेहतर है। नोकिया के लिए एलजीपीएल धन्यवाद के कारण क्यूटी भी व्यापार के लिए उपयुक्त है! –

+0

ऑब्जेक्ट इंटरफ़ेस में फ़ील्ड समेत _all_ लेकिन व्यावहारिक है, यह एक दुःस्वप्न को पुन: सक्रिय करता है। उद्धरण के लिए – Borsunho

38

गिडो ने एक बार कहा था कि "हम सभी यहां वयस्कों की सहमति कर रहे हैं"। यहां बहुत पहले से लंबी व्याख्या है: http://mail.python.org/pipermail/tutor/2003-October/025932.html

एक समझौता है जो निजी तत्वों का मतलब है और आपको उनका उपयोग नहीं करना चाहिए। जब तक आप नहीं जानते कि आप क्या कर रहे हैं और आप वास्तव में करना चाहते हैं।

लिंक भी पर्ल के मामले में यह डाल करने के लिए एक और तरीका है का उल्लेख है:

"एक पर्ल मॉड्यूल पसंद करेंगे कि आप अपने रहने वाले कमरे के बाहर रहे
क्योंकि आप आमंत्रित नहीं किया गया है, न कि क्योंकि इसमें एक शॉटगन है। "

+11

+1, मुझे यह पसंद है। – Davy8

+0

उद्धरण प्यार करो। मेरा मानना ​​है कि निजी उदाहरण चर होने के कारण प्रोग्रामर को आपके रहने वाले कमरे में आने से * रखने के लिए अधिक है। कई सामान्य मामलों में (एसएसपी। सेटर विधियों में), आप चाहते हैं कि किसी भी कारण से ऑब्जेक्ट द्वारा आंतरिक रूप से संग्रहीत होने से पहले कुछ ऑब्जेक्ट को कुछ डेटा बदलने या प्रारूपित करना है। इस मामले में, आप किसी अन्य प्रोग्रामर को यह जानने की उम्मीद नहीं कर सकते कि उस चर को कैसे संग्रहीत किया जाना चाहिए या एक्सेस किया जाना चाहिए। इस तर्क के सभी गेटटर और सेटर विधियों के भीतर incapsulated किया जा सकता है। और उजागर ivars छोड़कर गन्दा/भ्रमित/भ्रामक है। गोपनीयता के लिए यह मेरा एकमात्र तर्क है। –

9

एक्सेस संशोधक (सार्वजनिक, निजी, संरक्षित, आदि) class-based programming के लिए आवश्यक नहीं हैं। वे सिर्फ एक विशेषता है, जैसे multiple inheritance

2

पूर्ण ऑब्जेक्ट उन्मुख क्या है?एलन के ने कहा, "असल में मैंने" ऑब्जेक्ट उन्मुख "शब्द बनाया है, और मैं आपको बता सकता हूं कि मेरे पास सी ++ दिमाग में नहीं है।" माना जाता है कि, शायद उसके पास शायद मन में पाइथन नहीं था, लेकिन यह ध्यान देने योग्य है कि स्मॉलटाक भी कक्षाओं को सम्मेलन से बचाता है, कोई जनादेश नहीं।

-4

एक भाषा पूर्ण उद्देश्य ओरिएंटेड कहा जाता है यदि उसके पास कोई आदिम डेटा प्रकार नहीं है। प्रत्येक डेटा प्रकार जिसे हमें बनाने की आवश्यकता है।

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