[Python] Problema di Importazione incrociata legato alle Function Annotations
Piacenza Federico
piacenza.federico a gmail.com
Ven 16 Mar 2018 15:26:22 CET
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.
Ho cercato di costruire un esempio (il piu' piccolo possibile e che trovate
in fondo alla mail) che presentasse la problematica.
In pratica dopo aver lanciato il *main.py* il programma va in *ImportError *nel
momento in cui cerca di fare l'importazione '*from **Cassetto import
CCassetto'* contenuta nel file *Oggetto.py*.
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?
Un grazie anticipato a chi mi puo' dare dei suggerimenti per
risolvere/aggirare il problema.
di seguto il messaggio di errore:
*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
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20180316/a519cbc5/attachment.html>
Maggiori informazioni sulla lista
Python