Tengo un problema al reemplazar el método desde donde ... se utiliza la declaración de importación. Algunos ejemplo para ilustrar el problema:Sobrescribir el método del módulo desde el que se utiliza ... importar
# a.py module
def print_message(msg):
print(msg)
# b.py module
from a import print_message
def execute():
print_message("Hello")
# c.py module which will be executed
import b
b.execute()
me gustaría método print_message (msg) anular sin cambiar el código en un módulo o b. Lo intenté de muchas maneras, pero desde ... importa el método original de importación. Cuando cambié el código a
import a
a.print_message
que veo mi cambio.
¿Podría sugerirme cómo puedo solucionar este problema?
Gracias de antemano por cualquier pequeño ejemplo.
Saludos
------------------ ------------------ actualización
I intentado hacer eso como a continuación, por ejemplo:
# c.py module
import b
import a
import sys
def new_print_message(msg):
print("New content")
module = sys.modules["a"]
module.print_message = new_print_message
sys.module["a"] = module
Pero esto no funciona donde estoy usando para ... importación. Está trabajando solo para la importación, pero como escribí, no quiero cambiar el código en los módulos b.py y a.py.
(1) ¿Qué quiere decir con "anular"? Parche de mono? (2) En el código que presenta, solo hay un 'print_message()'. – NPE
Quiero cambiar el método print_message() para imprimir, p. Mensaje "Nuevo contenido". ¿Cómo lograr eso desde el archivo c.py sin cambios en a.py y b.py? – Pawel
para explicación y demostración de "parche de mono": http://stackoverflow.com/a/6647776/1498405 – hardmooth