Articles of monkeypatching

Ponche de pato en una propiedad en python

Me gustaría poder agregar una propiedad http://docs.python.org/library/functions.html#property a un objeto (una instancia específica de una clase). es posible? Algunas otras preguntas sobre la perforación de patos / parches de monos en python: Adición de un método a una instancia de objeto existente Python: cambio de métodos y atributos en tiempo de ejecución ACTUALIZACIÓN: Respondida por […]

¿Por qué el monkeypatch de Python no funciona al importar una clase en lugar de un módulo?

Estaba teniendo problemas al usar el código de la respuesta aceptada aquí . El código funciona dependiendo de cómo hago la importación de datetime. ¿Porqué es eso? ¿Es posible burlarse de él para que funcione en ambos sentidos? Estoy usando Python 3.4 . El siguiente código ilustra el problema: import pytest from datetime import datetime […]

Python: cómo combinar el método de clase de parche a otro método de clase

Tengo el siguiente código: class A: def __init__(self): self.a = “This is mine, ” def testfunc(self, arg1): print self.a + arg1 class B: def __init__(self): self.b = “I didn’t think so” self.oldtestfunc = A.testfunc A.testfunc = self.testfuncPatch def testfuncPatch(self, arg): newarg = arg + self.b # B instance ‘self’ self.oldtestfunc(self, newarg) # A instance ‘self’ […]

Si se permiten parches de mono tanto en Ruby como en Python, ¿por qué es más controvertido en Ruby?

En muchas de las discusiones que he escuchado sobre Ruby, en las que las personas expresson sus reservas sobre el idioma, el tema del parche de los monos se presenta como una de sus principales preocupaciones. Sin embargo, rara vez escucho los mismos argumentos en el contexto de Python, aunque también está permitido en el […]

pymongo + gevent: tirame un plátano y solo monkey_patch?

Rápido aquí, que necesita más experiencia en el dominio de pymongo del que tengo ahora: ¿Las partes “correctas” del controlador de pymongo están escritas en python para que yo las llame a gevent monkey_patch () y altere con éxito el comportamiento de locking de pymongo en r / w dentro de los greenlets “asíncronos” de […]

Mono parcheando una propiedad @

¿Es posible parchear el valor de una @property de una instancia de una clase que no controlo? class Foo: @property def bar(self): return here().be[‘dragons’] f = Foo() print(f.bar) # baz f.bar = 42 # MAGIC! print(f.bar) # 42 Obviamente, lo anterior produciría un error al intentar asignar a f.bar . Es # MAGIC! posible de […]

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