Orden del decorador Python

Abid Ullah 10 octubre 2023
  1. Orden del decorador Python
  2. Requisitos previos para Decorator Order en Python
  3. Sintaxis de @decorator en Python
  4. Cómo se determina el orden del decorador en Python
  5. Decorador @decorator Ordenar en Python
  6. Dos tipos diferentes de decoradores en Python
Orden del decorador Python

En este artículo de Python, veremos qué son los decoradores, cómo se usan y cómo podemos utilizarlos para crear código. Veremos cómo un decorador es una herramienta fuerte que se puede usar para agregar funcionalidad a nuestras aplicaciones y se puede encontrar en el lenguaje de programación Python.

Orden del decorador Python

En Python, un decorador es una función especial que modifica el comportamiento de otra función. El decorador es un patrón de diseño que agrega nueva funcionalidad a un objeto existente sin cambiar su estructura y generalmente se llama antes de definir una función o una clase.

Los decoradores en Python son una poderosa herramienta para modificar funciones y clases. Un decorador es una función que toma otra función como argumento y devuelve una nueva función que envuelve la función original.

También se puede usar para modificar el comportamiento de una función sin cambiar el código de la función en sí. Esto es útil para agregar funciones a funciones existentes o cambiar el comportamiento de una función en un contexto específico.

Los decoradores se utilizan a menudo para implementar funciones como:

  1. Almacenamiento en caché
  2. Registro
  3. Control de acceso

Requisitos previos para Decorator Order en Python

Debemos tener una comprensión fundamental de Python antes de que podamos aprender sobre los decoradores.

Debemos aceptar la idea de que todo en Python se considera objetos, incluso clases. Los nombres que proporcionamos a estas cosas son solo identificadores conectados a ellas.

No hay excepciones aquí; las funciones también se consideran objetos (con atributos). Múltiples nombres distintos tienen el potencial de vincularse a un solo objeto de función.

Por lo tanto, debemos tener conocimientos básicos de lo siguiente:

  1. Lenguaje de programación Python
  2. Funciones
  3. Clases

Entonces, podemos trabajar fácilmente con órdenes de decoradores en Python.

Sintaxis de @decorator en Python

El siguiente paso es observar la sintaxis de los decoradores de Python y preguntar: ¿cómo determina Python el orden en el que interpreta los decoradores?

Código de ejemplo:

@mydecorator
def my_function():
    pass

Entonces, esta es la sintaxis de un decorador en Python. Usaremos decoradores con funciones y clases con la misma sintaxis.

Cómo se determina el orden del decorador en Python

Cuando se aplican numerosos decoradores a una función o clase, los decoradores se utilizan en el orden en que se crearon; esto podría conducir a un comportamiento inesperado. Debemos tener en cuenta este hecho, ya que el orden en que se aplican los decoradores puede afectar el comportamiento de una función o clase.

Es esencial recordar que el orden en que se aplican los decoradores puede afectar el funcionamiento de la clase o función. Cuando se colocan varios decoradores en un componente, los decoradores se colocan en el orden en que fueron declarados.

Decorador @decorator Ordenar en Python

En Python, los decoradores generalmente se implementan como funciones que toman una función como argumento y devuelven una función modificada. Por ejemplo, podemos considerar el siguiente decorador.

Siga los pasos a continuación para escribir el código:

  • Defina la función utilizando la palabra clave def.
  • Defina otra función dentro de la función usando la palabra clave def.
  • Imprima cualquier declaración o agregue alguna funcionalidad en la función.
  • Utilice la instrucción return para ambas funciones.
  • Definir el decorador.
  • Siga los pasos mencionados anteriormente en la sintaxis del decorador.
  • Defina otra función para el decorador.
  • Agregue algunas funcionalidades a la función. Vea el código a continuación para una mejor comprensión.
  • Imprime la función decoradora y proporciona un valor para el parámetro x.

Código de ejemplo:

def decorator(func):
    def wrapper(x):
        print("Before calling ", func.__name__)
        result = func(x)
        print("After calling ", func.__name__)
        return result

    return wrapper


@decorator
def foo(x):
    return x + 1


print(foo(2))

Aquí simplemente estamos imprimiendo para ver la salida de todo nuestro código.

La salida del código:

Before calling  foo
After calling  foo
3

Podemos ver que se imprime la primera sentencia: (Before calling foo). La segunda declaración en el código (After calling foo) se imprime en segundo lugar.

Y la parte del decorador se imprime al final, que es x+1 porque pasamos el valor 2 para el valor del parámetro del decorador. Y obtuvimos 3 como resultado.

Ahora, analizaremos otro código para comprender mejor a los decoradores.

Entonces, ya hemos pasado por los pasos de definición de funciones y decoradores. Seguiremos nuevamente los mismos pasos de acuerdo a nuestros requerimientos.

En este código, supongamos que queremos que la parte decorador se ejecute antes que la segunda declaración de la función anidada. Así que usaremos el siguiente código.

Código de ejemplo:

def my_decorator(func):
    def wrapper():
        print("Before the function is called.")
        func()
        print("After the function is called.")

    return wrapper


@my_decorator
def say_hello():
    print("Hello, Abid!")


say_hello()

La salida del código:

Before the function is called.
Hello, Abid!
After the function is called.

Aquí podemos ver que Antes de llamar a la función. se imprime primero. ¡Hola, Abid! la parte del decorador se imprime en segundo lugar, y Después de llamar a la función. se imprime al final.

Dos tipos diferentes de decoradores en Python

Ahora veremos cómo se pueden aplicar dos funciones de decorador diferentes al método num(). El decorador interno trabajará primero, seguido por el decorador externo después de un breve descanso.

Código de ejemplo:

# code for testing decorator chaining
def decorator1(function):
    def inner():
        a = function()
        return a + a

    return inner


def decorator(function):
    def inner():
        a = function()
        return 4 * a

    return inner


@decorator1
@decorator
def num():
    return 10


print(num())

La salida del código:

80

Entonces, en el ejemplo anterior, el decorador interior trabajó primero y el exterior trabajó después. Y por lo tanto, obtenemos la salida del código 80.

El orden en que se aplican los decoradores puede ser importante. En general, debemos aplicar decoradores a funciones y clases en el orden en que serán llamadas.

Sin embargo, los decoradores utilizados en las clases siempre deben aplicarse antes de aplicar los decoradores a las funciones.

Autor: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn

Artículo relacionado - Python Decorator