Como sobrescrever uma classe python importada para todas as chamadas
Eu crio um python-packages / MyLibPackage que importarei em meus projetos.
MyLibPackage.____init____.py
inclui mymodiciation.py. Além disso, a pasta MyLibPackage contém outro arquivo: base_classes.py (= external project)
mymodiciation.py imports "from base_classes import *
".
Objetivo: Eu posso importar MyLibPackage que tem todas as classes de base_classes (= external project). E se eu precisar modificar algumas classes ou funções, eu posso sobrescrever isso em mymodiciation.py. Isso funciona, mas eu tenho um problema. Por exemplo:
Sobrescrevo essas classes em mymodiciation.py:
<code>class Bookcollection(Bookcollection): new_member = "lalala" class user(user): def get_books(self): return Bookcollection() </code>
se eu fizer:
<code>from MyLibPackage import * x = user() books = x.get_books() </code>
então o objeto Bookcollection tem a propriedade "new_member". Boa! Mas se eu fizer isso:
<code>from MyLibPackage import * x = shelf() #this class is not overwritten and used also the object "Bookcolelction" books = x.get_books() </code>
então o objeto Bookcollection NÃO tem a propriedade "new_member" porque ele é instanciado com MyLibPackage.base_classes.Bookcollection e não com minha classe sobrescrita MyLibPackage.mymodiciation.Bookcollection
Como posso dizer: se eu sobrescrevo uma classe na mymodiciation, então o MyLibPackage tem que usar isso, embora quando a chamada for de MyLibPackage.base_classes.shelf (get_books).