Salut,

Je souhaite faire un package. N'ayant pas de notions d'architecture logiciel, j'ai jeté un oeil à ce guide et à différentes sources pour l'inspiration. Pour faire court j'ai en tête cette organisation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
core/
    __init__.py
    solver.py
    solvers/
        __init__.py
        solverbase.py
        solver1.py
L'idée ici est de pouvoir ajouter différents solvers lorsque le projet évoluera. solver.py suit le design pattern "strategy" qui permet de créer à la volée l'un ou l'autre solver tout en conservant une syntaxe commune. Peut-être fais-je fausse route, n'hésitez pas à pointer un problème.
Je galère avec les imports relatifs. Il y a quelque chose qui m'échappe.

solver.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
from solvers import *
 
class Solver(object):
    def __init__(self):
        self.SolverStrat = solver1.Solver1
 
obj = Solver()
__init__.py (dans le dossier solvers)
solverbase.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
class SolverBase(object):
    def __init__(self):
        print('Init ok')
solver1.py
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
from .solverbase import SolverBase
 
class Solver1(SolverBase):
 
    def __init__(self):
        SolverBase.__init__(self)
Je m'attends à voir s'afficher 'Init ok' car à l'instanciation de l'objet Solver j'instancie en fait Solver1 qui lui même hérite de SolverBase. Sauf qu'il ne se passe rien. Si je print obj j'ai droit à une info sur l'objet en lui-même:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
>>> __main__.Solver object at 0x00000000074F0F0
J'en déduit que l'instanciation n'a pas eu lieu. Mais pourquoi?