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.