Comprensión profunda de los decoradores en Python

  • Decorador

    Un decorador es una función que toma otra función y extiende el comportamiento de esta última función sin modificarla explícitamente.

  • Funciones

    Una función devuelve un valor basado en los argumentos dados.

  • Objetos de primera clase

    En Python, las funciones son objetos de primera clase.

    Esto significa que las funciones pueden pasarse y usarse como argumentos, como cualquier otro objeto (sting, int, float, list, etc.).

  • Funciones internas

    Las funciones internas son funciones definidas dentro de otras funciones.

  • Devolución de funciones desde funciones

    Python también permite usar funciones como valores de retorno.

    La función de retorno sin los paréntesis, lo que significa que está devolviendo una referencia a la función que devolvió.

  • Decoradores simples

    def my_decorator(func):
        def wrapper():
            print("Something is happening before the function is called.")
            func()
            print("Something is happening after the function is called.")
        return wrapper
    
    def say_whee():
        print("Whee!")
    
    say_whee = my_decorator(say_whee)
    

    Los decoradores envuelven una función, modificando su comportamiento.

  • Azúcar sintáctica

    El formato anterior es un poco torpe.

    Python le permite usar decoradores de una manera más simple con el @símbolo, a veces llamado sintaxis de "tarta".

    El siguiente ejemplo hace exactamente lo mismo que el primer ejemplo de decorador:

    def my_decorator(func):
        def wrapper():
            print("Something is happening before the function is called.")
            func()
            print("Something is happening after the function is called.")
        return wrapper
    
    @my_decorator
    def say_whee():
        print('Whee!')
    
  • Reutilización de decoradores

    Un decorador es solo una función normal de Python.

    Se puede importar a otros archivos.

    def do_twice(func):
        def wrapper_do_twice(*args, **kwargs):  # 输入参数
            func(*args, **kwargs)
            return func(*args, **kwargs)   # return values
        return wrapper_do_twice 
    

    Para mantener la información por introspección:

    import functools
    
    def do_twice(func):
        @functools.wraps(func)   # 
        def wrapper_do_twice(*args, **kwargs):
            func(*args, **kwargs)
            return func(*args, **kwargs)
        return wrapper_do_twice
    
  • Decoradores de lujo

  • Clases de decoración

    Decoradores que están empotrados en Python son @classmethod, @staticmethody @property.

    Los decoradores @classmethody @staticmethodse utilizan para definir métodos en una clase.

    El @propertydecorador se utiliza para personalizar captadores y definidores para atributos de clase.

  • De Liao Xuefeng

    El decorador es esencialmente una función de orden superior que devuelve una función.

  • Referencias

  1. Introducción a los decoradores de Python
  2. PEP 318 - Decoradores para funciones y métodos
  3. Wiki de Python: Decoradores
  4. Sitio web oficial de Liao Xuefeng

Supongo que te gusta

Origin blog.csdn.net/The_Time_Runner/article/details/109171356
Recomendado
Clasificación