Sobes.tech
Middle

Co robi metoda new w kontekście języka Python?

sobes.tech AI

Odpowiedź od AI

__new__ - to metoda klasy odpowiedzialna za tworzenie nowego egzemplarza klasy. Jest wywoływana przed __init__ i określa, jaki obiekt zostanie zwrócony. Jest najczęściej używana do tworzenia unikalnych obiektów (Singleton) lub obiektów typu niemutowalnego (np. tuple lub str).

class Singleton:
    _instance = None

    def __new__(cls):
        # Sprawdza, czy już istnieje egzemplarz
        if cls._instance is None:
            # Jeśli nie, tworzy go, delegując tworzenie do klasy nadrzędnej (object)
            cls._instance = super().__new__(cls)
        # Zwraca istniejący lub właśnie utworzony egzemplarz
        return cls._instance

# Przykłady użycia
s1 = Singleton()
s2 = Singleton()

# Oczekiwany wynik: True
print(s1 is s2)

Porównanie __new__ i __init__:

  • __new__:

    • Metoda statyczna (pierwszy argument to cls).
    • Wywoływana przed utworzeniem egzemplarza.
    • Zwraca utworzony egzemplarz.
  • __init__:

    • Metoda instancji (pierwszy argument to self).
    • Wywoływana po utworzeniu egzemplarza.
    • Nie zwraca wartości (domyślnie None).
    • Używana do inicjalizacji atrybutów utworzonego obiektu.