tienen - librerias python machine learning
¿Alguna biblioteca de soporte de AOP para Python? (6)
Comenzaría con la biblioteca de Python Decorator . Mucho de eso es tipo de cosas de AOP.
Intento utilizar algunos AOP en mi programación Python, pero no tengo ninguna experiencia de las diversas bibliotecas que existen.
Entonces mi pregunta es:
¿Qué soporte AOP existe para Python? ¿Y cuáles son las ventajas de las diferentes bibliotecas entre ellos?
Editar
He encontrado algunos, pero no sé cómo se comparan:
Editar 2
¿En qué contexto los usaré?
Tengo dos aplicaciones, escritas en Python, que generalmente tienen métodos que calculan impuestos y otras cosas de dinero. Me gustaría poder escribir un "esqueleto" de una funcionalidad y personalizarla en tiempo de ejecución, por ejemplo, cambiando la forma en que se aplican los impuestos locales (por país, estado, ciudad, etc.) sin tener que sobrecargar el completa pila.
¿Qué pasa con el Python-aspectlib licenciado por BSD ?
Estado de implementación
Se completan funciones de tejido, métodos, instancias y clases.
Usar anotaciones no es realmente AOP, porque el proceso de tejido está algo codificado.
Hay varios frameworks de AOP en Python (conté y Aspyct
8 de ellos, de los cuales Aspyct
fue el claro ganador).
Voy a publicar un documento con mis conclusiones en una de las próximas conferencias, incluido un caso de uso de la industria de la vida real.
Otra biblioteca de AOP para python sería pytilities
. Actualmente es el más poderoso (hasta donde yo sé).
Sus características son:
- hacer clases de Aspectos reutilizables
- aplicar aspectos múltiples a una instancia o clase
- dejar de aplicar aspectos a una instancia / clase
- agregar nuevos atributos a una instancia mediante el uso de un aspecto
- aplicar asesoramiento a todos los atributos de una instancia / clase
- ...
También tiene otros extras como algunos descriptores especiales (ver la documentación)
En Python, la programación orientada a aspectos generalmente consiste en modificar dinámicamente clases e instancias en tiempo de ejecución, lo que comúnmente se conoce como monkeypatching. En una respuesta a otra pregunta de AOP, resumí algunos de estos casos de uso para AOP en Python .
Vea el enlace de S.Lott sobre los decoradores de Python para ver algunos ejemplos excelentes, y vea el PEP que define a los decoradores .
Python tenía AOP desde el principio, simplemente no tenía un nombre impresionante. En Python 2.4 se agregó la sintaxis del decorador, lo que hace que la aplicación de decoradores sea muy agradable sintácticamente.
Tal vez si quieres aplicar decoradores basados en reglas necesitarías una biblioteca, pero si estás dispuesto a marcar las funciones / métodos relevantes cuando los declaras, probablemente no lo hagas.
Aquí hay un ejemplo para un decorador de caché simple (lo escribí para esta pregunta ):
import pickle, functools
def cache(f):
_cache = {}
def wrapper(*args, **kwargs):
key = pickle.dumps((args, kwargs))
if key not in _cache:
_cache[key] = f(*args, **kwargs) # call the wrapped function, save in cache
return _cache[key] # read value from cache
functools.update_wrapper(wrapper, f) # update wrapper''s metadata
return wrapper
import time
@cache
def foo(n):
time.sleep(2)
return n*2
foo(10) # first call with parameter 10, sleeps
foo(10) # returns immediately