2010-04-14 21 views
31

मैं पाइथन (मैं जावा पृष्ठभूमि से आ रहा हूं) के लिए बहुत नया हूं और मुझे आश्चर्य है कि कोई भी मुझे पाइथन मानकों के साथ मदद कर सकता है। क्या यह मॉड्यूल में एकाधिक कक्षा डालने के लिए एक सामान्य या "उचित" अभ्यास है? मैं Django के साथ काम कर रहा हूं और ट्यूटोरियल्स के साथ शुरू किया है और वे एक ही मॉड्यूल में अपने डेटाबेस मॉडल कक्षाएं डालते हैं। क्या यह ऐसा कुछ है जो सामान्य रूप से किया जाता है या क्या मुझे प्रति कक्षा 1 वर्ग के साथ रहना चाहिए? क्या कोई कारण है कि मैं एक दूसरे पर करूँगा?पायथन मॉड्यूल में कई कक्षाएं

आशा है कि मैं स्पष्ट हूं और जेनेरिक नहीं हूं। अग्रिम में सभी के लिए धन्यवाद!

+1

डुप्लिकेट: http://stackoverflow.com/questions/106896/how-many-python-classes-should-i-put-in-one-file –

+0

मैंने वही चीज़ सोच ली है। (मैं जावा अनुभव के साथ पाइथन के लिए नया हूं।) इसके अलावा, पाइथनिक दिमाग में पैकेज कैसे फिट होते हैं? –

उत्तर

28

यहाँ मैं क्या ठेठ जावा परियोजनाओं के देखा है से अंगूठे का एक नियम है उपयोगी ? यदि आपका जावा परियोजना का आयोजन किया गया: संगठन: फिर से सूचना के लिए

toplevel/ 
    subproject.py <-- put class Foo, Bar here 
    subproject2.py <-- put class Baz, Qux here 

चीजें:

toplevel/ 
    subproject/ 
     Foo.java 
     Bar.java 
    subproject2/ 
     Baz.java 
     Qux.java 

फिर अपने अजगर परियोजना की तरह दिखना चाहिए

  • इनर क्लासों का प्रयोग न करें। बस एक ही मॉड्यूल
  • परंपरा के मुताबिक में कक्षाओं में कहें, चीजें हैं जो के साथ _ शुरू कर रहे हैं "निजी"
  • यह "सार्वजनिक चर"
5

ऐसा करना बिल्कुल उचित है। एक मॉड्यूल समूह संबंधित कार्यक्षमता। यदि वह कार्यक्षमता कई वर्गों (उदाहरण के लिए, वृक्ष, नोड, पत्ता) में लागू की जाती है तो उन्हें एक साथ रखना उचित है।

एक मॉड्यूल जावा क्लास की तुलना में जावा पैकेज से अधिक निकटता से जुड़ा हुआ है। आप मॉड्यूल के लिए नामित फ़ोल्डर के रूप में एक मॉड्यूल को भी __init__.py फ़ाइल के साथ कार्यान्वित कर सकते हैं (इसलिए पाइथन मॉड्यूल को इस तरह पहचान सकता है; __init__.py वैकल्पिक रूप से प्रारंभिक कोड और कक्षाओं, कार्यों और उप-पैकेजों की सूची भी शामिल कर सकता है निर्यात।)

+0

नोट, अधिकांश स्टाइल मानकों में '__init __। Py' खाली या खाली होने के करीब है। यह पता चला है कि यह भ्रमित हो सकता है और मॉड्यूल के लिए असंगठित महसूस कर सकता है जिसमें एक ही स्तर पर दोनों submodules और सामान्य सामान शामिल हैं। –

+0

@ माइक ग्राहम: डीजेंगो '__init __। पीई' फाइलों में बहुत से कार्यों और कक्षाओं को रखता है और django अच्छी तरह से माना जाता है। – blokeley

+0

@blokeley, Django निश्चित रूप से लोकप्रिय है, लेकिन मुझे नहीं पता कि इसे व्यापक रूप से पाइथन सर्वोत्तम सिद्धांतों का पालन करने के रूप में माना जाता है या नहीं। मैंने कभी भी Django का उपयोग नहीं किया है, लेकिन ऐसा लगता है कि लोगों को अपने ऐप्स को काम करने के लिए बदसूरत, भयानक चीजों का लॉग करने की आवश्यकता है। Http://jcalderone.livejournal.com/39794.html और http://effbot.org/pyfaq/what-is-init-py-used-for.htm और '__init __। Py' के बारे में पढ़ने के लिए विभिन्न SO धागे देखें आमतौर पर खाली हो रहा है। मेरे साइट-पैकेज में प्रोजेक्ट्स जिनमें यह ट्विस्ट, पायमेटा और पीईएफलेक्स शामिल है। –

4

पायथन में यह निश्चित रूप से सामान्य बात है। आप कब और क्यों एक दूसरे को चुनते हैं आंशिक रूप से स्वाद का मामला है, और आंशिक रूप से सम्मेलन।

यदि आपको अभी भी पायथन पता चल रहा है, और इसलिए इसके सम्मेलन, the style guide पढ़ना आपके समय के लायक है।

5

संदेह में, बस पायथन के मानक पुस्तकालयों :)

उदाहरण के लिए देखते हैं, तो मानक कैलेंडर मॉड्यूल 31 वर्गों में शामिल है। तो हाँ, यह ठीक है।

जावा में सबसे नीचे पैकेज अजगर

में एक फ़ाइल क्या है कि मतलब है होना चाहिए:

4

इसे इस तरह सोचो के लिए ठीक है।

जावा में जो लिखा है वह एक वर्ग है जहां पायथन के मामले में, आप कक्षा के बजाय मॉड्यूल लिखते हैं। तो एक मॉड्यूल में कई कक्षाएं हो सकती हैं। जब भी आप किसी विशेष वर्ग का उपयोग करना चाहते हैं, पहले संबंधित मॉड्यूल आयात करें और फिर ऑब्जेक्ट्स बनाने के लिए कक्षा को कॉल करें।

यहां एक उदाहरण है।

Classes.py


class MyClass(object): 


    def greet(self): 
     print("Hello World") 


class MyNextClass(object): 

    def greetAgain(self): 
     print("Hello again") 

अब मैं कहीं से भी इस मॉड्यूल आयात कर सकते हैं काश


(यह एक मॉड्यूल नाम 'वर्ग' है)
import Classes 

if __name__ == '__main__': 

    a=Classes.MyClass() 
    a.greet() 

    b=Classes.MyNextClass() 
    b.greetAgain() 

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