2011-01-01 15 views
6

यह ओओपी के बारे में एक बहुत ही बुनियादी सवाल है (मैं अजगर का उपयोग कर रहा हूं लेकिन वास्तव में यह एक वैचारिक प्रश्न है इसलिए वास्तव में भाषा विशिष्ट नहीं है)। मैंने चारों ओर देखा है लेकिन कोई विशिष्ट ट्यूटोरियल या पुस्तकें इस विशिष्ट प्रश्न को कवर नहीं करती हैं। अगर मैं अस्पष्ट हूं तो मैं क्षमा चाहता हूं और जो भी मैंने लिखा है उसे स्पष्ट करने में खुशी होगी।ओओपी और दृढ़ता के बारे में शुरुआती के वैचारिक प्रश्न

मान लें कि मैं एक साधारण पता पुस्तिका बना रहा हूं जिसे मैं अचार का उपयोग कर डिस्क पर लिखना चाहता हूं। मेरे पास Contact नामक एक कक्षा है जहां __init__ कुछ तर्क (प्रथम नाम और अंतिम नाम) में लेता है और मेरे पास एक मेनू है जहां आप संपर्क बना सकते हैं, उन्हें संपादित कर सकते हैं आदि। ओओपी के सभी उदाहरणों के लिए मैंने देखा है कि वे कुछ ऐसा करेंगे ...

bob = Contact('Bob', 'Smith') 
jane = Contact('Jane', 'Smith') 

... संपर्क के नए उदाहरण बनाने के लिए। लेकिन ये सभी रनटाइम से पहले परिभाषित हैं। क्या होता है जब मैं उपयोगकर्ता इनपुट द्वारा फ्लाई पर बनाए गए इन सभी उदाहरणों को चाहता हूं? क्या मैं प्रत्येक व्यक्ति के लिए नए उदाहरण बना सकता हूं? मैं उपयोगकर्ता इनपुट से यह कैसे करूं? तो बस सभी उदाहरणों को एक सूची में लिखें और इसे अचार करें? या आप कुछ की तरह करते हैं ...

firstName, lastName = raw_input("Enter first name: "), raw_input("Enter last name: ")  
contact = Contact(firstName, lastName) 

... तो बस सूची संपर्क संलग्न करें और संपर्क उदाहरण के लिए हर बार जब मैं एक उपयोगकर्ता को जोड़ना चाहते नए मूल्यों मिल सकता है? यह एक महत्वपूर्ण अवधारणा है कि मुझे वास्तव में नहीं मिल रहा है (क्योंकि मैंने इसे वास्तव में कहीं भी समझाया नहीं है)। मैंने जो भी उदाहरण देखा है, वे ऊपर नहीं करते हैं बल्कि इसके बजाय प्रत्येक चीज़/व्यक्ति के लिए नए उदाहरण बनाते हैं लेकिन उनमें से सभी पूर्व परिभाषित हैं और फ्लाई पर नहीं बनाए गए हैं। मैं इस अवधारणा को समझाने के लिए किसी के लिए वास्तव में आभारी हूं।

उत्तर

1

हां, आमतौर पर यह आप कैसे करते हैं - अपनी वस्तुओं के सरणी बनाते हैं। या आपकी भाषा और/या ढांचे के आधार पर कुछ अन्य प्रकार के संग्रह। एक नई वस्तु बनाते समय, आप इसे पहले अस्थायी चर में बनाते हैं, और फिर इसे अपने संग्रह में डालें।

कभी-कभी, जब आपके पास बहुत सारी वस्तुएं होती हैं, तो आप उन्हें अपने लगातार भंडारण (जैसे डीबी या फ़ाइल) से एक बार लोड नहीं करते हैं। आप केवल एक (या कुछ) लोड करते हैं जिसके साथ आपको काम करने की आवश्यकता है। यदि आप केवल एक लोड करते हैं, तो यह एक विशेष चर हो सकता है। कई को फिर से संग्रह मिलेगा।

+0

क्या इनपुट डेटा को इंस्टेंस का नाम बनने के लिए वैसे भी है? या वह पूरी तरह से असफल है? या यहां तक ​​कि संभव है? मैं कुछ कहने की सोच रहा हूं ... firstName = raw_input ("आपका पहला नाम क्या है ?:") lastName = raw_input ("आपका अंतिम नाम क्या है ?:") eval (firstName) = संपर्क (firstName, lastName) – johnharris85

+1

@JHarris - जो भाषा पर निर्भर करता है। PHP और जावास्क्रिप्ट यह कर सकता है। सी ++/सी # नहीं कर सका। हालांकि, मुझे नहीं लगता कि यह सोचने का सही तरीका है। यदि आप नाम से संपर्क देखना चाहते हैं, तो संग्रह के प्रकार "शब्दकोश" ("कुछ भाषाओं में" मानचित्र ") का उपयोग करें। इस तरह के प्रत्येक संपर्क के लिए चर के साथ नामस्थान को प्रदूषित करना अपमानजनक और यहां तक ​​कि सीधे खतरनाक होगा (क्या होगा यदि कोई आपके चर के समान नाम के साथ संपर्क बनाता है?) –

3

आपका उदाहरण बिल्कुल ठीक है कि यह कैसे काम करता है।

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