Cómo sobrescribir una clase de python importada para todas las llamadas
Creo un paquete / MyLibPackage de python que importaré en mis proyectos.
MyLibPackage.____init____.py
Incluye mymodiciation.py. Además, la carpeta MyLibPackage contiene otro archivo: base_classes.py (= proyecto externo)
mymodiciation.py importa "from base_classes import *
".
Objetivo: Puedo importar MyLibPackage que tiene todas las clases de base_classes (= proyecto externo). Y si necesito modificar algunas clases o funciones, puedo sobrescribir esto en mymodiciation.py. Funciona pero tengo un problema. Por ejemplo:
Sobrescribo estas clases en mymodiciation.py:
class Bookcollection(Bookcollection):
new_member = "lalala"
class user(user):
def get_books(self):
return Bookcollection()
si lo hago:
from MyLibPackage import *
x = user()
books = x.get_books()
entonces el objeto Bookcollection tiene la propiedad "new_member". ¡Bueno! Pero si hago esto:
from MyLibPackage import *
x = shelf() #this class is not overwritten and used also the object "Bookcolelction"
books = x.get_books()
entonces el objeto Bookcollection NO tiene la propiedad "new_member" porque está instanciado con MyLibPackage.base_classes.Bookcollection y no con mi clase sobrescrita MyLibPackage.mymodiciation.Bookcollection
Cómo puedo decir: si sobrescribo una clase en mymodiciation, MyLibPackage tiene que usar esto, aunque cuando la llamada se llame desde MyLibPackage.base_classes.shelf (get_books).