Python Academy · पाठ

Python क्लास कैसे बनाई जाती हैं

type, डिफ़ॉल्ट मेटाक्लास और क्लास निर्माण हुक को समझें।

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

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

type() एक मेटाक्लास है

Python की प्रत्येक क्लास, type का एक इंस्टेंस है। type स्वयं एक क्लास है—यह सभी मेटाक्लास का मेटाक्लास है।

# These are equivalent:
class Dog:
    sound = "woof"

Dog2 = type("Dog2", (), {"sound": "woof"})
print(type(Dog))    # <class 'type'>
print(type(Dog2))   # <class 'type'>

type() का तीन-तर्कीय रूप

type(name, bases, namespace) गतिशील रूप से एक नई क्लास बनाता है। पर्दे के पीछे class कथन ठीक यही करता है।

Animal = type("Animal", (), {"speak": lambda self: "..."})
Dog = type("Dog", (Animal,), {"speak": lambda self: "woof"})

d = Dog()
print(d.speak())   # woof

क्लास निर्माण के चरण

जब Python को कोई class कथन दिखाई देता है, तो वह: 1) मेटाक्लास का समाधान करता है, 2) नेमस्पेस तैयार करता है, 3) क्लास बॉडी का निष्पादन करता है, 4) metaclass(name, bases, namespace) को कॉल करता है।

# class Foo(Base, metaclass=Meta):
#   x = 1
#
# Equivalent to:
# namespace = Meta.__prepare__("Foo", (Base,))
# exec(class_body, namespace)
# Foo = Meta("Foo", (Base,), namespace)

__prepare__

__prepare__(name, bases, **kw) मेटाक्लास की एक क्लास विधि है, जो क्लास बॉडी के निष्पादन के दौरान उपयोग की जाने वाली नेमस्पेस डिक्शनरी लौटाती है। OrderedDict या किसी कस्टम मैपिंग का उपयोग करने के लिए इसे ओवरराइड करें।

class OrderedMeta(type):
    @classmethod
    def __prepare__(mcs, name, bases, **kw):
        print(f"Preparing namespace for {name}")
        return {}

class MyClass(metaclass=OrderedMeta):
    x = 1
    y = 2

type में __new__ बनाम __init__

type.__new__ क्लास ऑब्जेक्ट बनाता है, जबकि type.__init__ उसे आरंभ करता है। मेटाक्लास के लिए, क्लास निर्माण को अनुकूलित करने हेतु __new__ को ओवरराइड करें।

class Singleton(type):
    _instances = {}

    def __call__(cls, *args, **kw):
        if cls not in cls._instances:
            cls._instances[cls] = super().__call__(*args, **kw)
        return cls._instances[cls]

class DB(metaclass=Singleton):
    pass

print(DB() is DB())  # True

क्लास डेकोरेटर बनाम मेटाक्लास

क्लास डेकोरेटर निर्माण के बाद लागू होते हैं, जबकि मेटाक्लास स्वयं निर्माण को नियंत्रित करते हैं। साधारण विस्तार के लिए डेकोरेटर को प्राथमिकता दें। जब निर्माण प्रक्रिया को प्रभावित करना आवश्यक हो, तभी मेटाक्लास का उपयोग करें।

def add_repr(cls):
    cls.__repr__ = lambda self: f"{cls.__name__}()"
    return cls

@add_repr
class Widget:
    pass

print(Widget())  # Widget()

__init_subclass__

जब भी कोई उपक्लास परिभाषित की जाती है, तब आधार क्लास पर __init_subclass__ को कॉल किया जाता है। उपक्लास के व्यवहार को अनुकूलित करने के लिए यह मेटाक्लास का एक हल्का विकल्प है।

class Plugin:
    _registry = []

    def __init_subclass__(cls, **kw):
        super().__init_subclass__(**kw)
        Plugin._registry.append(cls)

class AudioPlugin(Plugin): pass
class VideoPlugin(Plugin): pass

print(Plugin._registry)  # [AudioPlugin, VideoPlugin]

ABCMeta

ABCMeta एक अंतर्निर्मित मेटाक्लास है, जो @abstractmethod के माध्यम से अमूर्त आधार क्लासों को सक्षम करता है।

from abc import ABCMeta, abstractmethod

class Shape(metaclass=ABCMeta):
    @abstractmethod
    def area(self): ...

class Circle(Shape):
    def __init__(self, r): self.r = r
    def area(self): return 3.14159 * self.r ** 2

# Shape()  # TypeError: Can't instantiate abstract class

किसी क्लास के मेटाक्लास का निरीक्षण

किसी क्लास का मेटाक्लास जानने के लिए type(cls) और विधि समाधान क्रम देखने के लिए cls.__mro__ का उपयोग करें।

class Meta(type): pass

class Foo(metaclass=Meta): pass

print(type(Foo))       # <class '__main__.Meta'>
print(Foo.__mro__)     # (Foo, object)

मेटाक्लास इनहेरिटेंस

किसी क्लास का मेटाक्लास उसकी उपक्लासों को विरासत में मिलता है। यदि दो आधार क्लासों के मेटाक्लास अलग हों, तो सबसे अधिक व्युत्पन्न मेटाक्लास का उपयोग करना पड़ता है, अन्यथा टकराव उत्पन्न होता है।

class MyMeta(type): pass

class Base(metaclass=MyMeta): pass
class Child(Base): pass   # Child's metaclass is also MyMeta

print(type(Child))   # <class '__main__.MyMeta'>

मेटाक्लास का उपयोग कब करें

इन कार्यों के लिए मेटाक्लास का उपयोग करें: उपक्लासों का स्वचालित पंजीकरण, क्लास की अपरिवर्तनीय शर्तों को लागू करना, ORM फ़ील्ड का पता लगाना, जैसे Django के Model में, और API फ़्रेमवर्क रूटिंग। अधिकांश मामलों में इसके बजाय __init_subclass__ या क्लास डेकोरेटर का उपयोग करें।

# Real-world: Django ORM uses ModelBase metaclass
# to collect field definitions into _meta

# You rarely need a custom metaclass;
# __init_subclass__ covers most plugin/registration patterns

त्वरित जाँच

type("Dog", (Animal,), {"speak": lambda self: "woof"}) क्या करता है?

पुनरावलोकन

प्रत्येक क्लास, type का एक इंस्टेंस है। क्लास निर्माण की प्रक्रिया: मेटाक्लास का समाधान करें → नेमस्पेस तैयार करें → बॉडी का निष्पादन करें → मेटाक्लास को कॉल करें। साधारण उपक्लास हुक के लिए __init_subclass__ को प्राथमिकता दें; पूर्ण मेटाक्लास का उपयोग तभी करें जब आपको क्लास निर्माण को स्वयं नियंत्रित करना हो।

शुरुआत निःशुल्क

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

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

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

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

क्या “Python क्लास कैसे बनाई जाती हैं” पाठ निःशुल्क है?

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

“Python क्लास कैसे बनाई जाती हैं” में मैं क्या सीखूँगा?

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

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

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

“Python क्लास कैसे बनाई जाती हैं” पाठ पूरा करने में कितना समय लगता है?

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

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

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

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

  1. Python क्लास कैसे बनाई जाती हैं
  2. कस्टम मेटाक्लास लिखना
  3. डिस्क्रिप्टर: __get__, __set__, __delete__
  4. __slots__ और मेमोरी अनुकूलन
← Python Academy पर वापस जाएँ