2013-02-20 31 views
12

में जावाबीन समकक्ष मैं ओओपी के रूप में पाइथन का उपयोग करने के लिए बिल्कुल नया हूं। मैं जावा पृष्ठभूमि से आ रहा हूँ। आप पाइथन में बराबर एक जवाबीन कैसे लिखेंगे? असल में, मुझे एक कक्षा की आवश्यकता है कि:पाइथन

  1. लागू करने योग्य कार्यान्वयन। > निजी संपत्तियों
  2. डमी निर्माता

किसी भी आदानों -

  • getters और setters है? मैं एक नमूना कोड की तलाश में हूँ!

  • +0

    सभी को धन्यवाद। यहां मेरी क्वेरी हल करता है। – stealthspy

    उत्तर

    21

    आप नहीं करते हैं, क्योंकि Python is not Java। सबसे अधिक संभावना है कि आपको केवल एक छोटी सी छोटी कक्षा लिखनी चाहिए, namedtuple बनाएं, एक शब्दकोश, या ऐसा कुछ पास करें।

    1. न तो serializable और न ही "एक अंतरफलक को लागू करने" पायथन में समझ में आता है (अच्छी तरह से, कुछ चौखटे और उन्नत उपयोग के मामलों में यह करता है, लेकिन यहाँ नहीं में): लेकिन सवाल का जवाब देने। सीरियलाइजेशन मॉड्यूल, जैसे कि pickle, किसी विशेष को कार्यान्वित करने या विरासत के बिना काम (आप अन्य तरीकों से प्रक्रिया को कस्टमाइज़ कर सकते हैं, लेकिन आपको लगभग कभी भी आवश्यकता नहीं है)।
    2. You don't write getters and setters। आप बस सार्वजनिक विशेषताओं का उपयोग करें। बाद में आपको एक नॉनट्रिविअल गेटर/सेटर की आवश्यकता होनी चाहिए, तो आप इसे property पारदर्शी रूप से बदल सकते हैं।
    3. डमी कन्स्ट्रक्टर की कोई आवश्यकता नहीं है, जब तक आप विशेषताओं को बनाना और उनके लिए डिफ़ॉल्ट मान सेट नहीं करना चाहते हैं। लेकिन शायद यह एक बुरा विचार है (एक बीन-ईश वर्ग) के लिए, क्योंकि उन विशेषताओं को मान निर्दिष्ट नहीं करना संभवतः एक त्रुटि है, और जब भी यह संदिग्ध नहीं है। तो बस पाइथन को आपके लिए उन त्रुटियों को पकड़ने दें (यह AttributeError उठाता है जब एक अस्तित्वहीन विशेषता का उपयोग किया जाता है)।
    +5

    +1: मैं बस उस लेख का उल्लेख करने वाला था ("पायथन जावा नहीं है")। –

    +0

    लॉल, बस लेख के लिए लिंक पोस्ट किया गया ... – flaviotruzzi

    +1

    धन्यवाद। मैंने पायथन की कोशिश की और मेरा कोड आधा आकार था। धन्यवाद! मुझे बस एक अद्भुत भाषा मिली। मैं एक बुलबुले के नीचे था कि जावा इतना बेहतर था! – stealthspy

    3
    1. आप अधिकांश ऑब्जेक्ट को pickle मॉड्यूल के माध्यम से क्रमबद्ध कर सकते हैं;
    2. वहाँ पायथन में निजी गुणों के रूप में कोई ऐसी बातें कर रहे हैं (यह भी देखें:
    3. क्लास जो एक कन्स्ट्रक्टर को परिभाषित नहीं करते हैं, डिफ़ॉल्ट (विधि समाधान आदेश के अनुसार) का उपयोग करेंगे।

    निर्माता 'श्रृंखला' के लिए उदाहरण:

    >>> class A(object): 
    ...  def __init__(self): 
    ...   print("A") 
    ...  
    ... 
    >>> class B(A): pass # has no explicit contructor 
    ... 
    >>> b = B() 
    A 
    >>> 
    

    और - के रूप में @delnan लिखा है - आप भी पढ़ सकते हैं: http://dirtsimple.org/2004/12/python-is-not-java.html - जावा और अजगर काफी अलग संस्कृतियों है, यह कुछ समय के लिए ले जाता है दोनों (और सराहना) में कूदो।

    इसके अलावा, कुछ कोड लिखने के बाद, यह आम मुहावरों से तुलना करने में उपयोगी हो सकता है, के रूप में यहाँ सूचीबद्ध (मैं निश्चित रूप से एक बहुत इस तरह से सीखा):

    +0

    प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। – stealthspy

    1

    लागू करने योग्य कार्यान्वयन।

    अपना पसंदीदा प्रारूप चुनें, और एक ऐसा फ़ंक्शन लिखें जो आपके लिए इसे क्रमबद्ध करेगा। जेएसओएन, पिकल, वाईएएमएल, कोई काम। बस फैसला करो! > निजी संपत्तियों

    हम ऐसा नहीं करते हैं कि यहाँ, उन बंधन भाषाओं के गुण हैं, हम इस भाषा में सभी वयस्कों कर रहे हैं -

    getters और setters है।

    डमी निर्माता

    फिर नहीं कुछ हम वास्तव में के बारे में के रूप में हमारे कंस्ट्रक्टर्स एक छोटा सा अन्य भाषाओं से होशियार हैं चिंता।तो आप केवल एक __init__ परिभाषित कर सकते हैं और यह आपके सभी प्रारंभिक कार्य कर सकता है, अगर आपको एक कारखाना लिखना चाहिए या इसे उप-वर्ग करना चाहिए।

    +1

    मैं जेएसओएन/वाईएएमएल/आदि से ऑब्जेक्ट्स को कन्वर्ट करने के लिए मैन्युअल रूप से कोड लिख रहा हूं। ज्यादातर मामलों में न तो आवश्यक है और न ही सलाह दी जाती है। – delnan

    +0

    और जब 'अचार' का उपयोग नहीं किया जाना चाहिए क्योंकि इसकी असुरक्षित या धीमी है, या यह आपकी फैंसी ऑब्जेक्ट को संभाल नहीं सकती है? –

    +0

    यह उन मामलों में से एक है जहां विकल्प ठीक हैं ;-) हालांकि मुझे उम्मीद है कि ऐसे कई मामलों में, इसे स्वचालित करने के लिए एक मौजूदा समाधान है, इसलिए आपको अभी भी मैन्युअल रूप से कोड लिखने की आवश्यकता नहीं है। साथ ही, आखिरी मामले में, आप हमेशा अपनी पसंदीदा वस्तु को कैसे संभालते हैं, यह अनुकूलित करने के लिए आप हमेशा 'copyreg' या' __reduce__' का उपयोग कर सकते हैं। – delnan

    0

    Miku द्वारा बताया के रूप में:

    1. वस्तुओं Picke मॉड्यूल द्वारा श्रृंखलाबद्ध किया जा सकता है, लेकिन वहाँ लागू किया जाना एक इंटरफेस नहीं है, अजगर जावा नहीं है।

    2. अजगर में कोई निजी विशेषता नहीं है, आम तौर पर लोगों को बार (अंडरस्कोर) का उपयोग निजी गुण मतलब करने के लिए, लेकिन वे बाहरी दुनिया से पहुँचा जा सकता। गेटर्स और सेटर्स दोनों सीपीयू और प्रोग्रामर के समय बर्बाद कर रहे हैं।

    3. मिकू उत्तर में जोड़ने के लिए कुछ भी नहीं।

    गुणों के बारे में

    : Real world example about how to use property feature in python?

    अच्छा पाठ: http://dirtsimple.org/2004/12/python-is-not-java.html