Orden del decorador Python
- Orden del decorador Python
- Requisitos previos para Decorator Order en Python
-
Sintaxis de
@decorator
en Python - Cómo se determina el orden del decorador en Python
-
Decorador
@decorator
Ordenar en Python - Dos tipos diferentes de decoradores en 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:
- Almacenamiento en caché
- Registro
- 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:
- Lenguaje de programación Python
- Funciones
- 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.
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