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