2010-04-20 10 views
44

हो सकता है मेरे पास एक अजगर वर्ग है और इसके खिलाफ पिलिंट चलाया गया है। एक संदेश दे दिया था:पिलिंट संदेश को कैसे संभालें: चेतावनी: विधि एक फ़ंक्शन

Warning: Method could be a function 

इस मुझे बता कि यह कक्षा से बाहर इस विधि ले जाने के लिए है क्योंकि यह किसी भी उदाहरण चर का उपयोग नहीं करता है बेहतर होगा है?

सी # में मैं इसे एक स्थिर विधि बनाउंगा। यहाँ करने के लिए सबसे अधिक पागल बात क्या है?

उत्तर

53

इसे किसी फ़ंक्शन पर ले जाना आम है, अगर यह कक्षा को स्पर्श नहीं करता है। ,

@classmethod 
def spam(cls, ...): 
    # cls is the class, you can use it to get class attributes 

classmethod और staticmethod (जो पूर्व के समान ही है, सिवाय इसके कि विधि अपनी पहली से कक्षा के लिए एक संदर्भ नहीं मिलता है:

यह वर्ग गुण manipulates हैं, classmethod डेकोरेटर का उपयोग पैरामीटर) हाल ही में पेश किया गया है। इसका मतलब है कि कुछ पायथन प्रोग्रामर स्थिर और वर्ग विधियों से बचने के लिए उपयोग किए जाते हैं।

कुछ कट्टर पायथन प्रोग्रामर आपको बताएंगे कि ये सजावटी बस चीजों को जटिल करते हैं; कुछ अन्य लोग (आमतौर पर पूर्व सी # या जावा प्रोग्रामर) आपको बताएंगे कि फ़ंक्शन का उपयोग करना ऑब्जेक्ट-ओरिएंटेड पर्याप्त नहीं है। मुझे लगता है कि यह सिर्फ वरीयता का मामला है।

+4

मुझे लगता है कि '' @ staticmethod'' '@ classmethod'' से अधिक उपयुक्त है, क्योंकि यह स्पष्ट रूप से किसी भी वर्ग गुण या स्थिति में हेरफेर नहीं करता है। – mcepl

+0

जावा प्रोग्रामर स्थिर विधियों का भी उपयोग करते हैं –

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