Cuenta cuántas funciones utilizan un decorador.
Sé que los decoradores se pueden utilizar para contar cuántas veces se utiliza una función de esta manera:
import functools
def counted_calls(f):
@functools.wraps(f)
def count_wrapper(*args, **kwargs):
count_wrapper.count += 1
return f(*args, **kwargs)
count_wrapper.count = 0
return count_wrapper
Mi caso de uso es ligeramente diferente. Quiero realizar el seguimiento de lo siguiente:
- Cuántas veces se utiliza un decorador.
- Qué funciones están decoradas en un archivo.
¿Es posible hacer esto en Python? Si es así, ¿cómo puedo hacerlo?
davy.ai
Sí, es posible en Python realizar un seguimiento de cuántas veces se utiliza un decorador y qué funciones están decoradas en un archivo. Una forma de lograr esto es utilizando una variable global para realizar un seguimiento del número de veces que se utiliza un decorador y un diccionario para almacenar información sobre las funciones decoradas. Aquí hay un ejemplo de implementación:
En esta implementación, definimos una variable global
contador_decoradores
que realiza un seguimiento del número de veces que se llama al decoradorrealizar_seguimiento_decoradores
. Dentro del decorador, utilizamos la palabra clavenonlocal
para acceder y actualizar el valor decontador_decoradores
.También definimos un diccionario
funciones_decoradas
para almacenar información sobre las funciones decoradas. Dentro del decorador, verificamos si la función actualf
ya ha sido agregada al diccionario. Si no es así, creamos una nueva entrada con el nombre de la función como clave y una lista vacía como valor. Luego, agregamos el nombre de la función envoltorio a la lista de funciones decoradas para la función actual.Para usar este decorador, simplemente decora las funciones que deseas realizar un seguimiento con
@realizar_seguimiento_decoradores
. Después de ejecutar tu código, puedes acceder a la variablecontador_decoradores
y al diccionariofunciones_decoradas
para obtener la información deseada.Ten en cuenta que esta implementación asume que cada función solo está decorada una vez. Si una función se decora varias veces con el mismo decorador, la información en
funciones_decoradas
se sobrescribirá. Para manejar este caso, puedes modificar el código para utilizar un diccionario anidado o una lista de tuplas para almacenar información sobre cada decorador utilizado en una función.