जावा पायथन नहीं है। पायथन जावा नहीं है। कई मतभेद हैं जिन्हें आपने अभी यहां खुलासा किया है; आप अपेक्षा से अधिक।
जावा में, फ़ाइल का नाम मुख्य श्रेणी नाम और .java एक्सटेंशन जैसा ही है। पायथन में क्या मामला है?
विपरीत: फ़ाइल का नाम किसी भी चीज़ के समान नहीं है।
आधिकारिक ट्यूटोरियल के उदाहरणों में, वे कई कक्षाएं लिख रहे हैं और फ़ाइल नाम का कोई उल्लेख नहीं है। मैं तरह खो गया हूँ।
क्योंकि इससे कोई फर्क नहीं पड़ता। (ध्यान दें कि जावा में आपके पास प्रति फ़ाइल एक से अधिक कक्षाएं हो सकती हैं, जब तक कि संबंधित नाम के साथ केवल public
हो।अजगर में, public
वास्तव में इस तरह के रूप में मौजूद नहीं है)
List1 और List2 के लिए:। मैं मिल-
अपरिभाषित चर: List1 सूची मिली है: test_pie
अपरिभाषित चर: List2 सूची मिले at: test_pie
ऐसा इसलिए है क्योंकि उन विशेषताओं (जिसे आप जावा में "फ़ील्ड" कहते हैं) कक्षा से संबंधित हैं, ऑब्जेक्ट नहीं।
विधि (जावा के समान नाम) अभी भी पाइथन-सोच में कक्षा से संबंधित है, लेकिन इसे किसी ऑब्जेक्ट के माध्यम से एक्सेस किया जाता है। यही कारण है कि आपको पाइथन विधियों के लिए एक स्पष्ट self
पैरामीटर की आवश्यकता है: क्योंकि my_object.do_something(x, y, z)
का पूर्ण रूप से MyClass.do_something(my_object, x, y, z)
में अनुवाद किया गया है (अधिक या कम; "बाध्यकारी" वाले दृश्यों के पीछे कुछ चालबाजी है, जो आपको my_object.do_something
किसी ऑब्जेक्ट के रूप में इलाज करने की अनुमति देती है। हाँ, पायथन में , सब कुछ, एक वस्तु है भी कार्यों। और तुम सोचा था कि जावा OO। हा था।)
तुम अब भी वर्ग एक वस्तु के माध्यम से गुण, अगर तुम अजगर बता जहां यह देखने के लिए उपयोग कर सकते हैं। PrintList
के भीतर, list1
और list2
दायरे में नहीं हैं - क्योंकि पायथन वास्तव में केवल दो स्कॉप्स हैं: स्थानीय और वैश्विक। लेकिन self
गुंजाइश में है (यह एक पैरामीटर है, इसलिए यह स्थानीय दायरे में है), और आप self.list1
तक पहुंच सकते हैं, क्योंकि पाइथन में किसी ऑब्जेक्ट पर एक विशेषता को देखने से ऑब्जेक्ट विशेषता नहीं होने पर क्लास विशेषताओं पर वापस आ जाता है। (दरअसल, यह उससे अधिक जटिल है; कुछ अलग-अलग विशेष-विधि-नाम हुक हैं जिन्हें आप प्रक्रिया में सम्मिलित कर सकते हैं, कुछ भी कहने के लिए कि विरासत का निपटारा कैसे किया जाता है।)
तो शायद आप अब तक सोच रहे हैं बस आप अपनी कक्षा के बजाय वास्तविक पायथन ऑब्जेक्ट में गुण कैसे प्राप्त करते हैं। उत्तर: आप बस उन्हें असाइन करें। यदि आप कोई प्रतिबंध नहीं रखते हैं, तो आप उन्हें किसी भी नाम से किसी भी समय असाइन कर सकते हैं। वस्तु मूल रूप से सिर्फ एक शब्दकोश है। यदि आप Java * स्क्रिप्ट * (जावा से पूरी तरह से संबंधित एक भाषा) से परिचित हैं, तो यह वैसे ही काम करता है। हालांकि, पागलपन को नियंत्रित करने के लिए, विशेष रूप से नामित विधि __init__
में प्रारंभिक विशेषता मान असाइन करना सामान्य है, जिसे ऑब्जेक्ट के निर्माण पर तुरंत (यदि पाया जाता है) कहा जाता है (लेकिन यह सामान्य रूप से एक कन्स्ट्रक्टर नहीं है भावना; उस भूमिका को __new__
द्वारा खेला जाता है, लेकिन आपको वास्तव में पाइथन में वास्तव में इसकी आवश्यकता नहीं होती है), और उसके बाद केवल नए गुण बनाने के बजाय सेट किए गए गुणों को फिर से असाइन करें।
आप प्रतिबंध सेट कर सकते हैं यदि आप एक नई शैली वर्ग है, एक विशेष रूप से के लिए एक मूल्य निर्दिष्ट करके (3.x में स्वत: आप में निर्मित प्रकार object
से कम से कम परोक्ष रूप से वारिस चाहिए 2.x में) नामित वर्ग विशेषता __slots__
कहा जाता है। यह तारों की एक सूची होनी चाहिए जो मान्य पहचानकर्ता नाम हैं। इस जगह के साथ, पायथन (ए) वस्तुओं के लिए डेटा के आंतरिक भंडारण को अनुकूलित करने के लिए जानकारी का उपयोग करेगा; (बी) ऑब्जेक्ट में अन्य नामों के साथ विशेषताओं को जोड़ने से आपको अनुमति नहीं देता है; (सी) ऑब्जेक्ट इंस्टेंस के लिए विशेष __dict__
विशेषता के निर्माण को दबाएं जो मानों को गुणित करने के लिए एक शब्दकोश मैपिंग विशेषता नाम है। (और आपने सोचा था कि जावा समर्थित प्रतिबिंब। हां।) यह नहीं स्वचालित रूप से नामित विशेषताओं के लिए कोई मान असाइन करेगा; उन्हें सौंपा जाने से पहले उन्हें एक्सेस करने का प्रयास raise AttributeError
होगा।
आपको यहां कई प्रश्न हैं। आप किसको उत्तर देना चाहते हैं? –
मैंने कोड स्निपेट डाला क्योंकि मैं फ़ाइल नाम और वर्ग नाम विसंगतियों के कारण यह सोच रहा था।संपादन के बाद, मैंने आपका जवाब देखा (यह तेज़ था)। मुझे आपका जवाब पसंद आया। यह स्पष्ट था। –
कोड स्निपेट के पास इसके पहले किसी भी प्रश्न से कोई लेना देना नहीं है। –