Articles of monkeypatching

Cómo extender la instancia de clase

MyClass se define en module.py . No hay forma de que podamos modificarlo. Pero sí sabemos que la definición de clase se ve así: class MyClass: def method(self, msg): print ‘from method:’, msg Comienzo mi script con la importación del módulo y luego declaro la instancia de un objeto: import module foo = module.MyClass() Luego […]

¿Cómo crear nuevos objetos de celdas de cierre?

Necesito aplicar un parche en mi biblioteca para reemplazar una instancia de un símbolo, y algunos cierres de funciones hacen referencia a él. Necesito copiar esas funciones (ya que también necesito acceso a la versión original sin parchear de la función), pero __closure__ es inmutable, y no puedo copy.copy . copy.copy , entonces, ¿cómo puedo […]

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. […]