Jak zastąpić zaimportowaną klasę Pythona dla wszystkich wywołań
Tworzę python-packages / MyLibPackage, które będę importować w moich projektach.
MyLibPackage.____init____.py
zawiera mymodiciation.py. Ponadto folder MyLibPackage zawiera inny plik: base_classes.py (= zewnętrzny projekt)
import mymodiciation.py ”from base_classes import *
„
Cel: Mogę zaimportować MyLibPackage, który ma wszystkie klasy z klasy base_classes (= zewnętrzny projekt). A jeśli muszę zmodyfikować niektóre klasy lub funkcje, mogę je zastąpić w mymodiciation.py. To działa, ale mam problem. Na przykład:
Nadpisuję te klasy w mymodiciation.py:
<code>class Bookcollection(Bookcollection): new_member = "lalala" class user(user): def get_books(self): return Bookcollection() </code>
Jeśli zrobię:
<code>from MyLibPackage import * x = user() books = x.get_books() </code>
następnie obiekt Bookcollection ma właściwość „new_member”. Dobry! Ale jeśli to zrobię:
<code>from MyLibPackage import * x = shelf() #this class is not overwritten and used also the object "Bookcolelction" books = x.get_books() </code>
następnie obiekt Bookcollection NIE ma właściwości „new_member”, ponieważ jest instancją z MyLibPackage.base_classes.Bookcollection, a nie z moją nadpisaną klasą MyLibPackage.mymodiciation.Bookcollection
Jak mogę powiedzieć: jeśli nadpisuję klasę w modulacji, to MyLibPackage musi z niej skorzystać, chociaż wywołanie pochodzi z MyLibPackage.base_classes.shelf (get_books).