2017-04-03 4 views
8

में मॉड्यूल और कक्षा के बीच अंतर मैं मॉड्यूल में एक चर के लिए मान असाइन कर सकता हूं। यदि हां, कक्षा और मॉड्यूल के बीच क्या अंतर है।पाइथन

पीएस: मैं एक जावा लड़का हूं। अगर यह व्याख्या करने के तरीके में मदद करता है। धन्यवाद।

+0

अजगर मॉड्यूल, वर्ग, मेटा-कक्षाएं, आदि में हैं ** सभी वस्तुओं ** रूप में अच्छी तरह। आप मॉड्यूल के तर्क सेट कर सकते हैं। अंतर यह है कि एक वर्ग को '__init__', आदि के साथ एक विशेष तरीके से आकार दिया जाता है। –

+0

ठीक है, बहुत पहले दृष्टि अंतर: मॉड्यूल == फ़ाइल, कक्षा == फ़ाइल का हिस्सा। जावा में, हालांकि, लोग (या बेहतर कहा जाता है) के लिए प्रति फ़ाइल संरचना एक वर्ग है। अन्यथा, आप यह करने में सक्षम हैं: 'आयात समय; time.my_variable = 1' और आप इसे बाद में दायरे में उपयोग कर सकते हैं। – KeyWeeUsr

+4

आप मॉड्यूल के उदाहरण नहीं बना सकते हैं। मॉड्यूल * सिंगलेट्स * हैं, केवल एक प्रति मौजूद है। आप दूसरी ओर कक्षाओं के उदाहरण बना सकते हैं। यह * जावा * में कोई अलग नहीं है। कक्षाएं विरासत का समर्थन करती हैं, मॉड्यूल नहीं करते हैं। वर्ग मेटाक्लास का समर्थन करते हैं, मॉड्यूल नहीं करते हैं। कक्षाएं वर्णनकर्ताओं का समर्थन करती हैं, मॉड्यूल नहीं करते हैं। –

उत्तर

9
  • मॉड्यूल:

    एक मॉड्यूल अजगर परिभाषाएँ और बयानों वाली फ़ाइल है।

doc के रूप में कहते हैं।

तो पाइथन में एक मॉड्यूल कोड व्यवस्थित करने का एक तरीका है, और इसमें पाइथन कक्षाएं या केवल फ़ंक्शन शामिल हैं। यदि आपको अपनी परियोजना में उन कक्षाओं या कार्यों की आवश्यकता है, तो आप उन्हें import उन्हें देखेंगे। उदाहरण के लिए, math पायथन में मॉड्यूल में केवल एक गुच्छा कार्य है, और आप बस उन आवश्यक (math.sin) को कॉल करते हैं। बस इस question पर एक नज़र डालें।

दूसरी तरफ एक पाइथन वर्ग जावा वर्ग के समान कुछ है, यह केवल थोड़ा अलग तरीके से संरचित है।

5

विशाल पायथन में कक्षाओं और मॉड्यूल के बीच मतभेद हैं।

कक्षाएं ब्लूप्रिंट हैं जो आपको विशेषताओं और बाध्य कार्यक्षमता के साथ उदाहरण बनाने की अनुमति देती हैं। वर्ग विरासत, मेटाक्लास, और वर्णनकर्ताओं का समर्थन करते हैं।

मॉड्यूल इस से कोई भी कार्य नहीं कर सकते, मॉड्यूल अनिवार्य रूप से सिंगलटन उदाहरणों एक आंतरिक module वर्ग के हैं, और उनके सभी वैश्विक module उदाहरण पर विशेषताएँ हैं। आप आवश्यकतानुसार उन विशेषताओं में हेरफेर कर सकते हैं (जोड़ें, हटाएं और अपडेट करें), लेकिन ध्यान रखें कि ये अभी भी उस मॉड्यूल में परिभाषित सभी कोड के लिए वैश्विक नेमस्पेस बनाते हैं।

जावा परिप्रेक्ष्य से, कक्षाएं यहां अलग-अलग नहीं हैं। हालांकि मॉड्यूल में केवल एक वर्ग से अधिक हो सकता है; फ़ंक्शंस और किसी भी अन्य पायथन अभिव्यक्ति का कोई भी परिणाम मॉड्यूल में ग्लोबल्स भी हो सकता है।

तो एक सामान्य बॉलपार्क दिशानिर्देश के रूप में: वस्तुओं है कि आपकी समस्या डोमेन मॉडल के लिए ब्लूप्रिंट के रूप में

  • उपयोग कक्षाएं।
  • लॉजिकल इकाइयों में कार्यक्षमता एकत्र करने के लिए मॉड्यूल का उपयोग करें।

फिर डेटा को स्टोर करें जहां यह आपके एप्लिकेशन को समझ में आता है। वैश्विक राज्य मॉड्यूल में जाता है (और कार्य और कक्षाएं उतनी ही वैश्विक स्थिति होती हैं, जो शुरुआत में लोड होती हैं)। बाकी सब कुछ कक्षाओं के उदाहरण सहित अन्य डेटा संरचनाओं में जाता है।

0

क्या मैं मॉड्यूल में एक चर के लिए मान असाइन कर सकता हूं?
संक्षेप में।


module की अवधारणा (आयात करके, आप चर/तरीकों/कि मॉड्यूल में परिभाषित वर्गों की पहुंच है) एक एकल अजगर फ़ाइल जो आयात किया जा सकता को दर्शाता है।

यह आमतौर पर package अवधारणा के साथ चर्चा की जाती है, जो __init__.py के साथ एक फ़ोल्डर है। एक पैकेज में उप-पैकेज या मॉड्यूल हो सकते हैं, और साथ ही, मॉड्यूल के समान, __init__.py के अंदर आयात किए जाने वाले चर/विधियों/कक्षाओं को परिभाषित कर सकते हैं।

पायथन में मॉड्यूल/पैकेज रखने का उद्देश्य जावा में संकुल होने के समान है: नामकरण भ्रम को हल करने के लिए पुन: प्रयोज्य कोडों को शामिल और वर्गीकृत करना आदि।


इसके अलावा, अजगर भी module नामित अंतर्निहित वर्ग है list जैसे, tuple, dict (ध्यान दें कि अजगर builtin कक्षाएं विरासत कारणों की वजह से CapWords नामकरण परिपाटी का पालन नहीं करते)। एक module उदाहरण आयातित मॉड्यूल/पैकेज का प्रतिनिधित्व करता है।

आप एक मॉड्यूल (एकल अजगर फ़ाइल) या एक पैकेज (__init__.py साथ फ़ोल्डर), आम तौर पर
1. module वर्ग का एक नया उदाहरण
2. वर्गों/तरीकों बनाया जाएगा आयात करने के लिए import बयान का उपयोग करते हैं/उस आयातित पायथन फ़ाइल में परिभाषित चर को इस module उदाहरण के गुण के रूप में जोड़ा जाएगा (यदि यह एक पैकेज है, तो यह __init__.py में परिभाषित कक्षा/विधियों/चर शामिल होंगे)।

इसलिए, क्योंकि यह केवल module वर्ग का एक उदाहरण है, आप उस उदाहरण और अन्य क्लास इंस्टेंस ऑपरेशंस की विशेषता को मान निर्दिष्ट कर सकते हैं।

import math 

print(type([1,2,3])) 
print(type(math)) 
print(dir([1,2,3])) 
print(dir(math)) 

कंसोल:

<class 'list'> 
<class 'module'> 
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] 
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']