Empaquetado de código fuente de Python
Cuenta oficial de WeChat de Code Classmate: pruebas de software automatizadas.
Compañero de código Tik Tok nº1: Pruebas del software Geliao.
Decorador
El decorador de Python es una de las preguntas más frecuentes en las entrevistas. Si su currículum describe Python, probablemente le preguntarán al respecto.
Entonces, ¿cómo deberíamos responder a esta pregunta?
Aquí te explicaré el papel del decorador desde varios ángulos. Puedes elegir el que más te convenga.
El decorador en Python es esencialmente una función de orden superior, donde la designación de una función de orden superior es "una función cuyo valor de retorno es una función"
Hay dos componentes al uso de decoradores en la parte de Python.
①El símbolo @ llama al decorador.
②Define el método a decorar.
El ejemplo es el siguiente:
@nombre del decorador
Defina una función de decoración.
@logger
Definir función():
Pasar
Los decoradores pueden agregar funcionalidad adicional sin modificar la funcionalidad. Esta es la definición oficial de decorador.
De hecho, utilizaremos decoradores para implementar algunos requisitos auxiliares más allá de las funciones comerciales. Por ejemplo, agregaremos registro, monitoreo del rendimiento y contadores integrados a nuestra funcionalidad. Como todos sabemos, modificar funciones escritas es muy problemático y propenso a errores. Por tanto, es muy adecuado para "encapsular algunas funciones adicionales para funciones sin modificar su código interno", es decir, decoradores.
Staticmethod se utiliza para modificar métodos en una clase para que se pueda acceder a ellos directamente usando el nombre de la clase, como cls.foo().
El método de clase es similar al método estático, pero la diferencia es que el método estático pasará la clase al método modificado.
Clase A (objeto):
a = 1
def __init__ (self):
Self. a = 2
@método estático
def foo1():
Imprimir
@métodoclase
def foo2(cls):
Imprimir "Clase a es", cls.a
Imprimir "Instancia a es", cls(). a
Notas del curso de prueba de software Free Code Classmates, materiales de súper aprendizaje, videos completos, las últimas preguntas de la entrevista, artículos que se pueden reenviar, mensaje privado "Code Classmates 666" para obtener información.
La propiedad puede realizar el acceso a funciones y la asignación a propiedades, de modo que algunas funciones, como la verificación de parámetros, se pueden agregar a la función. Los métodos de acceso y asignación no cambiarán cuando se usen externamente. Tenga en cuenta que los nombres de los métodos de acceso y asignación son los mismos.
Clase A (objeto):
def __init__( self):
Self. __count = 0
@property
definir recuento(self):
devolver self. _ _count
@count. compositor
defina recuento(self, valor):
si no es instancia(valor, int):
raise ValueError ('¡el recuento debe ser un número entero!' )
Yo mismo.
_ _count=value
a = A()
Imprimir un recuento
a.count = 1
Imprimir un recuento
a.count = 1
Imprimir un recuento
p>a.count = "a" #Error de aumento de valor
Functools.wraps se utiliza en el código decorador. Puede copiar el nombre y otros atributos de la función original a la función wrapper(), de modo que pueda obtener los atributos de nombre de la función real en lugar del contenedor.
Importar herramientas de funciones
Definir registro (texto):
Definir decorador (función):
@functools.wraps (func )
definir wrapper(*args, **kw):
Imprimir "s s(): "(texto, func.__name__)
Función de retorno ( * args, **kw)
Contenedor de retorno
Decorador de retorno
#!/anaconda 3/envs/FeAl py/bin python 3.7
# -*-Codificación: utf-8 -*-
# -
# @File: sintaxis del decorador py
# @author :Bull.
# -
#Definir función de decoración
# 1. Ejemplo de decoración simple
Def logger(func):# En Python todo es un objeto.
Definir empaquetado (*args, **kw):
Print("Ingrese la función decorada")
Func(*args, **kw) # Llama a la función real en el decorador.
func(*args, **kw)
Imprimir("Función de decoración completada")
Volver al paquete
@logger # =logger(add)
def add(x, y):
Print("Ingresar función modificada")
print(f'{x } {y}={x y} ')
#Adición (1, 2)
# 2. Decorador con parámetros
def say_hello(country):
Definir contenedor (función):
def second(*args, **kw):
Si país == 'China':
Imprimir("Saludos del decorador")
elif contry == ' américa ':
Imprimir("Hola" del decorador)
En caso contrario:
Retorno
func(*args, **kw)
Retorno segundo
Retorno de retorno
@say_hello ('América')
def american():
print("Soy de Estados Unidos")
@ say_hello('China')
def China():
Imprimir("Soy de China")
Americano()
Imprimir(' * '*30)
China()
Fin
Los derechos de autor de este artículo pertenecen al autor. Para cualquier forma de reimpresión, comuníquese con el autor para obtener autorización e indique la fuente.