Ciao Federico,

Il 16/03/2018 15:26, Piacenza Federico ha scritto:
Ciao a tutti,

ho un problema di importazione incrociata che mi si è presentato nel
momento in cui ho iniziato ad inserire le 'annotations' sul valore di
ritorno dei metodi delle mie classi.
[...]
L'importazione in questione la faccio solamente allo scopo di documentare
il metodo *getCassetto()* della classe *COggetto*.

Cosa sbaglio? Uso male la tecnica delle Function Annotations?

In python di solito non si usano i getter ma si va dritti sugli attributi. Ma questo non ti risolve il problema degli import perchè potresti annotare i parametri di init. Magari gli import incrociati sono un sintomo di classi fatte male? O magari semplicemente ti basta non dividere ogni classe nel proprio file?

E le convenzioni dei nomi delle variabili sembrano più per C++ che per Python. A maggior ragione se usi le annotazioni dei tipi quella convenzione è ancora meno utile.

*C:\Users\Federico\Dropbox\Lavoro\Prove\Prova\venv\Scripts\python.exe
C:/Users/Federico/Dropbox/Lavoro/Prove/Prova/main.pyTraceback (most recent
call last):  File "C:/Users/Federico/Dropbox/Lavoro/Prove/Prova/main.py",
line 1, in <module>    from Cassetto import CCassetto  File
"C:\Users\Federico\Dropbox\Lavoro\Prove\Prova\Cassetto.py", line 1, in
<module>    from Oggetto import COggetto  File
"C:\Users\Federico\Dropbox\Lavoro\Prove\Prova\Oggetto.py", line 2, in
<module>    from Cassetto import CCassettoImportError: cannot import name
'CCassetto'*



*Main.py*

from Cassetto import CCassetto
from typing import List

class CScrivania:
    def __init__(self, dCassetti):
       self.dCassetti = {}
       #
       for sCassettoNome in dCassetti:
          self.dCassetti[sCassettoNome] = CCassetto(sCassettoNome,
dCassetti[sCassettoNome])
    def getlCassetti(self) -> List[CCassetto]:
       return list(self.dCassetti.values())

if __name__ == '__main__':
    dCassetti = {"Cassetto1": ["penna"], "Cassetto2": ["gomma", "cancelletto"]}
    oScrivania = CScrivania(dCassetti)



*Cassetto.py*

from Oggetto import COggetto
from typing import List

class CCassetto:
    def __init__(self, Nome, lOggettiNomi):
       self.Nome = Nome
       self.lOggetti = []
       for sOggettoNome in lOggettiNomi:
          self.lOggetti.append(COggetto(pCassetto=self, Nome=sOggettoNome))

    def getlOggetti(self) -> List[COggetto]:
       return self.lOggetti



*Cassetto.py*

from typing import List
from Cassetto import CCassetto # questa importazione è fatta solo per
la parte descrittiva del metodo getCassetto() nella classe 'COggetto'

class COggetto:
    def __init__(self, *, pCassetto, Nome):
       self.pCassetto = pCassetto
       self.Nome = Nome

    def getCassetto(self) -> CCassetto:
       return self.pCassetto


--
Riccardo Magliocchetti
@rmistaken

http://menodizero.it
_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python

Rispondere a