पायथन वर्गों में 'cls' वेरिएबल का प्रयोग किस लिए किया जाता है?


270

यही वजह है कि clsselfपाइथन वर्गों में एक तर्क के रूप कभी-कभी इस्तेमाल किया जाता है ?

उदाहरण के लिए:

class Person:
    def __init__(self, firstname, lastname):
        self.firstname = firstname
        self.lastname = lastname

    @classmethod
    def from_fullname(cls, fullname):
        cls.firstname, cls.lastname = fullname.split(' ', 1)

जवाबों:


293

के बीच का अंतर "self"और "cls"में परिभाषित किया गया है PEP 8। जैसा कि एड्रियन ने कहा, यह अनिवार्य नहीं है। यह एक कोडिंग शैली है। PEP 8कहते हैं:

समारोह और विधि तर्क :

हमेशा उपयोग करें self पहले तर्क के लिए तरीकों का उपयोग करें।

हमेशा clsक्लास के तरीकों के पहले तर्क के लिए उपयोग करें।


56

यह एक वर्ग विधि के मामले में प्रयोग किया जाता है। अधिक जानकारी के लिए इस संदर्भ की जाँच करें

EDIT: जैसा कि एड्रियन ने स्पष्ट किया है, यह एक सम्मेलन है। आप वास्तव में कुछ भी लेकिन उपयोग कर सकते हैं clsऔर selfउपयोग किया जाता है ( PEP8 )।


52

clsतात्पर्य उस विधि का वर्ग से है जबकि स्व का तात्पर्य यह है कि यह विधि वर्ग के उदाहरण से संबंधित है, इसलिए सदस्य को clsकक्षा के नाम से अभिगम किया जाता है, जहां स्वयं के साथ वर्ग के उदाहरण से अभिगम होता है ... यह एक ही अवधारणा है के रूप में static memberऔर non-static membersजावा में अगर आप जावा पृष्ठभूमि से हैं।


1
जावा संदर्भ के लिए धन्यवाद, अब समझें।
एडेनशॉ

उल्लेख के लिए धन्यवाद static memberऔर non-static members, इसे c ++ के संदर्भ में समझा
अमित JS

18

यह बहुत अच्छा सवाल है लेकिन सवाल के रूप में नहीं चाहते हैं। हालांकि 'सेल्फ' और 'एसएलएस' की इस्तेमाल की गई विधि में अंतर है, हालांकि एनालॉग वे एक ही स्थान पर हैं

def moon(self, moon_name):
    self.MName = moon_name

#but here cls method its use is different 

@classmethod
def moon(cls, moon_name):
    instance = cls()
    instance.MName = moon_name

अब आप देख सकते हैं कि दोनों ही चाँद फ़ंक्शन हैं लेकिन एक का उपयोग कक्षा के अंदर किया जा सकता है जबकि अन्य फ़ंक्शन नाम का चंद्रमा किसी भी वर्ग के लिए उपयोग किया जा सकता है।

व्यावहारिक प्रोग्रामिंग दृष्टिकोण के लिए:

सर्कल क्लास डिजाइन करते समय हम एरिया मेथड का प्रयोग स्वयं के बजाय cls के रूप में करते हैं क्योंकि हम नहीं चाहते कि क्षेत्र केवल सर्कल के विशेष वर्ग तक सीमित हो।


यदि आप कुछ और जोड़ना चाहते हैं जो कोडर की तलाश में है, यदि सही है, तो इसे अनुमोदित करेगा।
एक्सोरसिस्ट

2

स्व-पैरामीटर को स्वीकार करने के बजाय, क्लास मेथड्स एक cls पैरामीटर लेते हैं जो क्लास को इंगित करता है- और ऑब्जेक्ट उदाहरण नहीं -जबकि विधि को कहा जाता है। चूंकि क्लास विधि में केवल इस cls तर्क तक पहुंच है, इसलिए यह ऑब्जेक्ट इंस्टेंस स्थिति को संशोधित नहीं कर सकता है । इसके लिए स्व तक पहुंच की आवश्यकता होगी। हालाँकि, वर्ग विधियाँ अभी भी वर्ग स्थिति को संशोधित कर सकती हैं जो कक्षा के सभी उदाहरणों पर लागू होती हैं।

- पायथन ट्रिक्स

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.