2009-01-18 17 views
16

मेरे पास स्थिर तरीकों से भरा पाइथन वर्ग है। कच्चे कार्यों की बजाय कक्षा में पैकेजिंग के फायदे और नुकसान क्या हैं?क्या पाइथन कक्षा का उपयोग करने में कोई फायदा है?

+0

मैं यहां सर्वसम्मति से सहमत हूं, इसलिए मैंने सोचा है: पाइथन स्थिर तरीकों का समर्थन क्यों करता है? –

+0

@ डेयरी ज्यादातर ओओ स्थिरता के लिए –

उत्तर

29

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

0

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

0

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

12

नहीं। यह उन्हें बेहतर बनाने के लिए बेहतर होगा और यदि वे संबंधित हैं, तो उन्हें अपने मॉड्यूल में रखें। उदाहरण के लिए, अगर आप इस तरह एक वर्ग है:

class Something(object): 

    @staticmethod 
    def foo(x): 
     return x + 5 

    @staticmethod 
    def bar(x, y): 
     return y + 5 * x 

तो यह बेहतर होगा की तरह एक मॉड्यूल है,

# something.py 

def foo(x): 
    return x + 5 

def bar(x, y): 
    return y + 5 * x 

इस तरह, आप उन्हें निम्नलिखित तरीके से उपयोग करें:

import something 
print something.foo(10) 
print something.bar(12, 14) 

नामस्थानों से डरो मत। ;-)

1

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

यदि आपकी कक्षा में स्थिर विधियों के अलावा कुछ भी नहीं है, तो आपकी कक्षा केवल सिंटैक्टिक क्रूर है, और सीधे फ़ंक्शन बहुत स्पष्ट हैं और आपको जो चाहिए वह सब कुछ है।

5

अपने कार्य एक दूसरे या वैश्विक राज्य पर निर्भर कर रहे हैं, तो भी तीसरे दृष्टिकोण पर विचार करें:

class Something(object): 
    def foo(self, x): 
     return x + 5 

    def bar(self, x, y): 
     return y + 5 * self.foo(x) 

something = Something() 

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

0

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

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

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