Articles of monkeypatching

Agregar un sello de fecha y hora a la impresión de Python

Estoy tratando de depurar el comportamiento de una gran biblioteca de la que dependo, que utiliza una dispersión (sin hacer tantas cosas) de las declaraciones de impresión de depuración a través de sus muchos archivos de origen. El problema es que la mayoría, si no todas, estas declaraciones de impresión de depuración no contienen una […]

Mono parche __del__ a nueva función

Para fines de depuración específicos, me gustaría ajustar la función del de un objeto arbitrario para realizar tareas adicionales, como escribir el último valor del objeto en un archivo. Idealmente, quiero escribir mono (x) y debería significar que el valor final de x se imprime cuando se elimina x Ahora pensé que del es un […]

Operador de transposición de conjugado “.H” en números

Es muy conveniente usar el atributo .T para obtener una versión transpuesta de un ndarray . Sin embargo, no hay una forma similar de obtener la transposición del conjugado. La clase de matriz de Numpy tiene el operador .H , pero no ndarray. Porque me gusta el código legible, y porque soy demasiado perezoso para […]

¿Cómo multiplicar funciones en python?

def sub3(n): return n – 3 def square(n): return n * n Es muy fácil componer funciones en python: >>> my_list [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> [square(sub3(n)) for n in my_list] [9, 4, 1, 0, 1, 4, 9, 16, 25, 36] Desafortunadamente, cuando se quiere usar la composición como […]

Extendiendo las clases incorporadas en python

¿Cómo puedo extender una clase incorporada en python? Me gustaría agregar un método a la clase str. He hecho algunas búsquedas pero todo lo que encuentro son publicaciones antiguas, espero que alguien sepa algo más nuevo.

¿Cómo un mono parcha una función en python?

Tengo problemas para reemplazar una función de un módulo diferente con otra función y me está volviendo loco. Digamos que tengo un módulo bar.py que se ve así: from a_package.baz import do_something_expensive def a_function(): print do_something_expensive() Y tengo otro módulo que se parece a esto: from bar import a_function a_function() from a_package.baz import do_something_expensive do_something_expensive […]

Agregar una clase base a un objeto existente en Python

Tengo varios objetos de diferentes tipos (diferentes nombres de funciones, diferentes firmas) y los parcheo para tener una forma común de acceder a ellos desde diferentes funciones. Brevemente, hay un distribuidor que toma los objetos que quiero parchear y, según el tipo de objeto, llama a un parcheador diferente. Un parche agregará métodos al objeto: […]

Parches de mono en python: ¿Cuándo lo necesitamos?

En Python, el término monkey patch solo se refiere a modificaciones dinámicas de una clase o módulo en tiempo de ejecución. Como principiante, es realmente difícil para mí entender este término en el contexto de python. ¿Alguien me puede explicar con un ejemplo del mundo real? ¿Cómo lo hacemos exactamente? Modificaciones dinámicas de una clase. […]

¿Mono parcheando una clase de forma Django?

Dada una clase de formulario (en algún lugar profundo de tu aplicación gigante de Django) … class ContactForm(forms.Form): name = … surname = … Y teniendo en cuenta que desea agregar otro campo a este formulario sin extender o modificar la clase de formulario , ¿por qué no funciona el siguiente enfoque? ContactForm.another_field = forms.CharField(…) […]

¿Puedo parchar un decorador de Python antes de envolver una función?

Tengo una función con un decorador que estoy probando con la ayuda de la biblioteca de Python Mock . Me gustaría usar mock.patch para reemplazar el decorador real con un decorador de “bypass” simulado que simplemente llama a la función. Lo que no puedo entender es cómo aplicar el parche antes de que el decorador […]