Python Academy · पाठ

@classmethod और @staticmethod

उपयुक्त डेकोरेटर के साथ क्लास-स्तरीय और स्टैटिक विधियाँ परिभाषित करें।

पाठ 4, कुल 4 में से14 चरण

@classmethod और @staticmethod, CoddyKit पर Python Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Python Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

परिचय

@classmethod को पहला आर्गुमेंट वर्ग के रूप में मिलता है। @staticmethod को कोई विशेष आर्गुमेंट नहीं मिलता। दोनों वर्ग पर परिभाषित होते हैं।

इंस्टेंस बनाम वर्ग बनाम स्टैटिक

नियमित विधियों को self मिलता है। वर्ग विधियों को cls मिलता है। स्टैटिक विधियों को इनमें से कुछ भी नहीं मिलता। अपनी आवश्यक डेटा के आधार पर चुनें।
class Demo:
    def instance(self): return 'instance'
    @classmethod
    def class_m(cls): return f'class: {cls.__name__}'
    @staticmethod
    def static_m(): return 'static'
d = Demo()
print(d.instance())
print(Demo.class_m())
print(Demo.static_m())

फ़ैक्टरी के रूप में @classmethod

सबसे सामान्य उपयोग: वैकल्पिक कंस्ट्रक्टर। __init__ में पार्स करने के बजाय Date.from_string('2024-01-15') का उपयोग करें।
class Date:
    def __init__(self, y,m,d): self.y,self.m,self.d=y,m,d
    @classmethod
    def today(cls):
        from datetime import date
        d = date.today()
        return cls(d.year, d.month, d.day)
    def __repr__(self): return f'{self.y}-{self.m}-{self.d}'
print(Date.today())

विरासत के साथ @classmethod

किसी classmethod में cls आधार वर्ग के बजाय वास्तविक उपवर्ग को संदर्भित करता है। इससे फ़ैक्टरी विधियाँ उपवर्गों के साथ सही ढंग से काम करती हैं।
class Animal:
    @classmethod
    def create(cls, name):
        return cls(name)
    def __init__(self, name): self.name = name
class Dog(Animal): pass
d = Dog.create('Rex')
print(type(d).__name__, d.name)

यूटिलिटी के लिए @staticmethod

स्टैटिक विधियाँ तार्किक रूप से किसी वर्ग के साथ समूहीकृत सामान्य फ़ंक्शन होती हैं। वे वर्ग या इंस्टेंस डेटा तक पहुँच नहीं सकतीं।
class MathHelper:
    @staticmethod
    def clamp(value, lo, hi):
        return max(lo, min(hi, value))
print(MathHelper.clamp(15, 0, 10))
print(MathHelper.clamp(-5, 0, 10))

@staticmethod बनाम मॉड्यूल फ़ंक्शन

यदि किसी फ़ंक्शन को वर्ग की आवश्यकता नहीं है, तो वह मॉड्यूल-स्तरीय फ़ंक्शन हो सकता है। @staticmethod का उपयोग तभी करें जब वह तार्किक रूप से वर्ग से संबंधित हो।
class Validator:
    @staticmethod
    def is_email(s): return '@' in s and '.' in s
print(Validator.is_email('user@example.com'))
print(Validator.is_email('not-an-email'))

इंस्टेंस से कॉल करना

आप इंस्टेंस पर @classmethod और @staticmethod दोनों को कॉल कर सकते हैं, लेकिन cls और पहले आर्गुमेंट से संबंधित व्यवहार नहीं बदलता।
class C:
    @classmethod
    def who(cls): return cls.__name__
    @staticmethod
    def pi(): return 3.14
c = C()
print(c.who())
print(c.pi())

सिंगलटन के लिए वर्ग विधि

classmethod यह जाँच करके सिंगलटन पैटर्न लागू कर सकते हैं कि कोई इंस्टेंस पहले से मौजूद है या नहीं।
class Singleton:
    _instance = None
    @classmethod
    def get(cls):
        if cls._instance is None:
            cls._instance = cls()
        return cls._instance
a = Singleton.get()
b = Singleton.get()
print(a is b)

वर्ग विधियों को ओवरराइड करना

कोई उपवर्ग classmethod को ओवरराइड कर सकता है। तब cls उपवर्ग होगा और बहुरूपता बनी रहेगी।
class Base:
    @classmethod
    def info(cls): return f'{cls.__name__} info'
class Child(Base): pass
print(Base.info())
print(Child.info())

cls के साथ प्रकार जाँचना

किसी classmethod के भीतर cls वास्तविक वर्ग होता है। इंस्टेंस बनाने के लिए cls() का उपयोग करें—वर्ग का नाम हार्डकोड न करें।
class Shape:
    @classmethod
    def make(cls):
        return cls()  # NOT Shape()
class Square(Shape): pass
print(type(Square.make()).__name__)

@property के साथ संयोजन

वर्ग-व्यापी कैशिंग के लिए वर्ग-स्तरीय कैश किए गए मान को @classmethod और वर्ग एट्रिब्यूट के साथ जोड़ा जा सकता है।
class Config:
    _data = None
    @classmethod
    def load(cls):
        if cls._data is None:
            cls._data = {'debug': True}
        return cls._data
print(Config.load())

त्वरित जाँच

@classmethod में cls क्या होता है?

पुनरावलोकन

@classmethod को cls मिलता है: इसका उपयोग फ़ैक्टरी, वैकल्पिक कंस्ट्रक्टर और सिंगलटन के लिए करें। @staticmethod को कुछ विशेष नहीं मिलता: इसका उपयोग यूटिलिटी के लिए करें। cls वास्तविक (उप)वर्ग होता है।

आगे बढ़ते रहें

आप बहुत अच्छी प्रगति कर रहे हैं! अगली अवधारणा में निपुणता हासिल करने के लिए आगे बढ़ते रहें।
शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
76
पाठ
320

अक्सर पूछे जाने वाले प्रश्न

क्या “@classmethod और @staticmethod” पाठ निःशुल्क है?

हाँ—“@classmethod और @staticmethod” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Python Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“@classmethod और @staticmethod” में मैं क्या सीखूँगा?

उपयुक्त डेकोरेटर के साथ क्लास-स्तरीय और स्टैटिक विधियाँ परिभाषित करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Python Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Python Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Python Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“@classmethod और @staticmethod” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Python Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Python Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. फ़ंक्शन फ़र्स्ट-क्लास ऑब्जेक्ट के रूप में
  2. कस्टम डेकोरेटर लिखना
  3. @property डेकोरेटर
  4. @classmethod और @staticmethod
← Python Academy पर वापस जाएँ