एक Django ऐप को एकीकृत करते समय मैंने पहले उपयोग नहीं किया है, मुझे कक्षाओं में कार्यों को परिभाषित करने के लिए दो अलग-अलग तरीकों का उपयोग किया गया है। लेखक दोनों को जानबूझकर दोनों का उपयोग करना प्रतीत होता है। पहले एक के बाद एक मैं अपने आप को एक बहुत का उपयोग करें:मुझे @classmethod का उपयोग कब करना चाहिए और जब डीफ विधि (स्वयं)?
class Dummy(object):
def some_function(self,*args,**kwargs):
do something here
self is the class instance
अन्य एक, एक मैं का उपयोग नहीं करते है ज्यादातर क्योंकि मैं क्या समझ में नहीं आता है, जब यह उपयोग करने के लिए, और:
class Dummy(object):
@classmethod
def some_function(cls,*args,**kwargs):
do something here
cls refers to what?
अजगर डॉक्स में classmethod
डेकोरेटर इस वाक्य के साथ समझाया गया है:
एक वर्ग विधि, अंतर्निहित पहले तर्क के रूप में वर्ग को मिलने वाले एक उदाहरण विधि सिर्फ की तरह उदाहरण प्राप्त करता है।
तो मैं cls
Dummy
करने के लिए स्वयं (class
, नहीं उदाहरण) संदर्भित करता है लगता है। मैं ठीक से समझ नहीं ऐसा क्यों मौजूद है, क्योंकि मैं हमेशा ऐसा कर सकता है:
type(self).do_something_with_the_class
सिर्फ स्पष्टता के लिए इस है, या मैं सबसे महत्वपूर्ण हिस्सा याद किया: डरावना और आकर्षक चीजें हैं जो नहीं किया जा सका इसके बिना किया?
अच्छा एक: मुझे जवाब पसंद है कि क्यों - क्यों। जहां तक मुझे अब मिल गया है @classmethod किसी उदाहरण की आवश्यकता के बिना फ़ंक्शन तक पहुंचने की अनुमति देता है। यह वही है जो मैं खोज रहा था, धन्यवाद। – marue
@marue आपका स्वागत है! – Marcin
मैं कहूंगा कि उदाहरणों पर कॉलिंग क्लास विधियां खराब कोडिंग शैली है - ऐसा करने का कोई कारण नहीं है और केवल भ्रम पैदा कर सकता है। लेकिन हाँ यह काम करता है (जावा एक ही चीज़ की अनुमति देता है, लेकिन उदाहरणों के माध्यम से स्थैतिक तरीकों को कॉल करते समय एक संकलन चेतावनी जारी करता है) – Voo