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:

<code>class Bookcollection(Bookcollection):
   new_member = "lalala"


class user(user):
   def get_books(self):
      return Bookcollection()
</code>

si lo hago:

<code>from MyLibPackage import *
x = user()
books = x.get_books()
</code>

entonces el objeto Bookcollection tiene la propiedad "new_member". ¡Bueno! Pero si hago esto:

<code>from MyLibPackage import *
x = shelf() #this class is not overwritten and used also the object "Bookcolelction"
books = x.get_books()
</code>

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).

Respuestas a la pregunta(2)

Su respuesta a la pregunta