Sobes.tech
Middle

Mida teeb meetod new Python keele kontekstis?

sobes.tech AI

Vastus AI-lt

__new__ - on klassi meetod, mis vastutab uue klassi eksemplari loomise eest. Seda kutsutakse enne __init__ ja see määrab, milline objekt tagastatakse. Seda kasutatakse peamiselt unikaalsete objektide (Singleton) või muutumatute tüüpide (näiteks tuple või str) loomiseks.

class Singleton:
    _instance = None

    def __new__(cls):
        # Kontrollib, kas juba on eksemplar olemas
        if cls._instance is None:
            # Kui ei, siis loob selle, delegeerides loomise vanemklassile (object)
            cls._instance = super().__new__(cls)
        # Tagastab olemasoleva või just loodud eksemplari
        return cls._instance

# Kasutusnäited
s1 = Singleton()
s2 = Singleton()

# Oodatav tulemus: True
print(s1 is s2)

Võrdlus __new__ ja __init__ vahel:

  • __new__:

    • Staatiline meetod (esimene argument on cls).
    • Kutsutakse enne eksemplari loomist.
    • Tagastab loodud eksemplari.
  • __init__:

    • Eksemplari meetod (esimene argument on self).
    • Kutsutakse pärast eksemplari loomist.
    • Ei tagasta väärtusi (impliciti tagastab None).
    • Kasutatakse loodud objekti atribuutide initsialiseerimiseks.