So überschreiben Sie eine importierte Python-Klasse für alle Aufrufe

Ich erstelle ein Python-Paket / MyLibPackage, das ich in meine Projekte importiere.

MyLibPackage.____init____.py beinhaltet mymodiciation.py. Darüber hinaus enthält der MyLibPackage-Ordner eine weitere Datei: base_classes.py (= externes Projekt)

mymodiciation.py importiert "from base_classes import *".

Ziel: Ich kann MyLibPackage importieren, das alle Klassen von base_classes (= externes Projekt) enthält. Und wenn ich einige Klassen oder Funktionen ändern muss, kann ich dies in mymodiciation.py überschreiben. Es funktioniert, aber ich habe ein Problem. Zum Beispiel:

Ich überschreibe diese Klassen in mymodiciation.py:

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


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

wenn ich mache:

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

dann hat das Objekt Bookcollection die Eigenschaft "new_member". Gut! Aber wenn ich das mache:

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

dann hat das Objekt Bookcollection NICHT die Eigenschaft "new_member", weil er mit MyLibPackage.base_classes.Bookcollection und nicht mit meiner überschriebenen Klasse MyLibPackage.mymodiciation.Bookcollection instanziiert ist

Wie kann ich sagen: Wenn ich eine Klasse in Mymodiciation überschreibe, muss MyLibPackage diese verwenden, obwohl der Aufruf von MyLibPackage.base_classes.shelf (get_books) stammt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage