Sobes.tech
Middle

Ką daro metodas new Python kalbos kontekste?

sobes.tech AI

Atsakymas iš AI

__new__ - tai klasės metodas, atsakingas už naujo klasės egzemplioriaus kūrimą. Jis kviečiamas prieš __init__ ir nustato, kuris objektas bus grąžintas. Dažniausiai naudojamas kuriant unikalius objektus (Singleton) arba nekintamo tipo objektus (pvz., tuple arba str).

class Singleton:
    _instance = None

    def __new__(cls):
        # Patikrina, ar jau egzistuoja egzempliorius
        if cls._instance is None:
            # Jei ne, sukuria jį deleguodamas kūrimą tėvų klasei (object)
            cls._instance = super().__new__(cls)
        # Grąžina esamą arba ką tik sukurtą egzempliorių
        return cls._instance

# Pavyzdžiai naudojimo
s1 = Singleton()
s2 = Singleton()

# Laukiamas rezultatas: True
print(s1 is s2)

Palyginimas tarp __new__ ir __init__:

  • __new__:

    • Statinė metodas (pirmas argumentas cls).
    • Kviečiamas prieš egzemplioriaus kūrimą.
    • Grąžina sukurtą egzempliorių.
  • __init__:

    • Egzemplioriaus metodas (pirmas argumentas self).
    • Kviečiamas po egzemplioriaus kūrimo.
    • Negrąžina reikšmių (implicitiai grąžina None).
    • Naudojamas kuriant naujo objekto atributus.