__new__ palabra clave de Python

Aditya Raj 30 enero 2023
  1. ¿Cuál es la new palabra clave en Python?
  2. ¿Cómo usar la new palabra clave en Python?
  3. ¿Cómo podemos implementar explícitamente el método __new__()?
  4. Conclusión
__new__ palabra clave de Python

En lenguajes de programación como C++ y Java, puede usar la new palabra clave explícitamente para crear un objeto a partir de una clase. Sin embargo, no puede usar la new palabra clave directamente en Python. En este artículo, discutiremos cómo funciona la new palabra clave en Python. También veremos cómo podemos usar explícitamente la new palabra clave para observar el proceso de creación de objetos en Python.

¿Cuál es la new palabra clave en Python?

En Python, __new__ es un atributo asociado con los objetos. Puede comprobar todos los atributos de un objeto utilizando la función dir(). La función dir() toma el objeto como entrada y devuelve una lista de todos los atributos del objeto de la siguiente manera.

class Car:
    def __init__(self, model, brand, price, country):
        self.Brand = brand
        self.Model = model
        self.Price = price
        self.Country = country


myCar = Car("Tesla", "Cybertruck", 40000, "USA")
print(dir(myCar))

Producción :

['Brand', 'Country', 'Model', 'Price', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

Puede observar que hay un atributo __new__ presente en la lista.

¿Cómo usar la new palabra clave en Python?

No podemos usar explícitamente la nueva palabra clave en Python como lo hacemos en otros lenguajes de programación. Sin embargo, el atributo __new__ en Python funciona igual que la nueva palabra clave en otros lenguajes de programación. El método __new__ se define en la clase base object y se utiliza para asignar almacenamiento para un objeto.

Cuando creamos un nuevo objeto llamando al nombre de la clase usando la sintaxis className(), se ejecuta el método __call__() de la clase. El método __call__() llama al método __new__(). Aquí, el método __new__() asigna memoria para el objeto y devuelve el control al método __call__().

El método __call__() luego llama al método __init__(). El método __init__() inicializa las variables de clase y devuelve el control al método __call__(). El método __call__() luego finaliza la ejecución y nos devuelve la referencia al objeto creado.

¿Cómo podemos implementar explícitamente el método __new__()?

No necesitamos implementar explícitamente el método __new__() en Python. Sin embargo, si desea ver el orden en que se ejecutan el método __new__() y el método __init__(), podemos anular el método __new__(). Como hemos visto anteriormente, el método __new__() es un método estático y está definido en la clase de objeto. Cuando creamos un objeto usando el nombre de la clase, su método __new__() se invoca automáticamente.

El método __new__() toma un argumento de entrada cls que representa la clase actual. Luego, el método __new__() llama al método __new__() de su superclase con la clase actual como argumento de entrada. Este proceso debe continuar hasta que lleguemos a la clase base objeto. En la clase base objeto, se ejecuta el método __new__() y se asigna almacenamiento para el objeto que queremos crear. Luego, se crea una instancia del objeto. El método __new__() luego devuelve la instancia, después de lo cual se usa el método __init__() para inicializar las variables en la instancia.

Puede observar todo este proceso en el siguiente ejemplo.

class Car:
    def __init__(self, brand, model, price, country):
        print("I am in the __init__() method.")
        self.Brand = brand
        self.Model = model
        self.Price = price
        self.Country = country

    def __new__(cls, *args, **kwargs):
        print("I am in the __new__() method.")
        return super(Car, cls).__new__(cls)


myCar = Car("Tesla", "Cybertruck", 40000, "USA")

Producción :

I am in the __new__() method.
I am in the __init__() method.

Aquí, el método __new__() que hemos implementado pertenece a la clase actual, y no afecta la forma en que se crea una instancia de cualquier objeto. Para cambiar eso, necesitaremos cambiar el método __new__() en la clase base object. Sin embargo, no se nos permite hacerlo y usted no debe intentar hacer ningún experimento de este tipo. Además, puede verificar en la salida que el método __new__() se ejecuta antes que el método __init__().

Conclusión

Hemos discutido la nueva palabra clave en Python en este artículo. También vimos cómo podíamos obtener todos los atributos asociados con una clase usando el método dir(). Además, también vimos cómo se crea un objeto en Python y cómo funciona el método __new__(). También hemos implementado el método __new__() por nuestra cuenta. Sin embargo, no es muy útil y le sugiero que no implemente el método __new__() por su cuenta.

Autor: Aditya Raj
Aditya Raj avatar Aditya Raj avatar

Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.

GitHub

Artículo relacionado - Python Class