Sobes.tech
Junior — Middle

Milyen metaklasz metódushívások történnek egy új osztály meghatározásakor?

sobes.tech MI

Válasz az MI-től

Amikor egy új osztályt definiálunk Pythonban, a metaklasz kontrollálja az osztály létrehozási folyamatát. A metaklasz módszereinek fő hívásai a következő sorrendben történnek:

  1. __new__ — meghívás az új osztályobjektum (azaz az osztály maga) létrehozására. Itt módosíthatja vagy előkészítheti az osztály attribútumait a létrehozás előtt.

  2. __init__ — inicializálja a létrehozott osztályobjektumot, általában további konfigurációkra használják.

  3. __call__ — meghívás az új osztály példányainak létrehozásakor, de ez már az osztály meghatározása után történik.

Egyszerűsített metaklasz példa:

class Meta(type):
    def __new__(cls, name, bases, dct):
        print(f"{name} osztály létrehozása")
        return super().__new__(cls, name, bases, dct)

    def __init__(cls, name, bases, dct):
        print(f"{name} osztály inicializálása")
        super().__init__(name, bases, dct)

class MyClass(metaclass=Meta):
    pass

Futtatáskor a következő fog megjelenni:

MyClass osztály létrehozása
MyClass osztály inicializálása

Így, egy új osztály definiálásakor, a metaklasz __new__ és __init__ módszerei hívódnak meg.