[Python] Passaggio oggetti tra classi

De Santis Luca farolfo a hotmail.com
Ven 6 Dic 2013 18:35:16 CET


Vi ammorbo ancora con gli alberi. Devo fare una funzione per trovare il path di una qualsiasi foglia di un albero.


Per fare ciò ho pensato di inserire nella classe che definisce l’albero un campo nodoGenitore, così, facendo la ricerca di un nodo per nome, quando trovo il nodo che mi interessa, vedo chi è il nodo padre e vado a ritroso fino alla radice e trovo il path completo della foglia.


Mi accade però una cosa strana, di sicuro sbaglio qualcosa io, l’init della classe è questo:


    def __init__(self,w):
        self.nomeNodo = w
        self.sottoNodi = []
        self.nodoGenitore=None




Quindi aggiungo i nodi all’albero con questa funzione:


#Genera l'albero di parole   
def _generaAlbero(word):
    root = WNode(word)
    listaNodi=_generaListaParole(word,root)
    for name in listaNodi:
        root.sottoNodi += [_generaAlbero(name.nomeNodo)]
    return root


#Genera lista parole lecite
def _generaListaParole(word,level):


    ret=[]
    nomiNodi=[]


    alfabeto='abcdefghijklmnopqrstuvwxyz'


    for j in range(0,len(word)+1):
        for i in range(0,len(alfabeto)):
            generata = word[0:j]+alfabeto[i] + word[j:]
            if _BinarySearch(generata)==True:
                inLista=generata in nomiNodi
                if inLista==False:
                    nomiNodi.append(generata)
                    tmpNode = WNode(generata)
                    tmpNode.nodoGenitore=level
                    print tmpNode.nodoGenitore.nomeNodo
                    ret.append(tmpNode)


    return ret 


word è una stringa e level un nodo. La funzione durante l’esecuzione nel terminale mi stampa il nome del nodo genitore in modo corretto quando faccio:


print tmpNode.nodoGenitore.nomeNodo


Quando perņ vado a fare la ricerca della parola con questa funzione


    def path(self,w):
        self._path(self,w)



    def _path(self,root,w):
        for node in root.sottoNodi:
            if(node.nomeNodo==w):
                print "Trovato "+node.nomeNodo
                print node.sottoNodi
                print "        "+node.nodoGenitore.nomeNodo
                break
            else:
                self._path(node,w)


python mi dice che non puņ fare


print "        "+node.nodoGenitore.nomeNodo


in quanto il valore č None, ma in teoria dovrebbe contenere il nodo padre, solo la root dovrebbe essere vuota e il nodo che gli passo non č una root
-------------- parte successiva --------------
Un allegato HTML č stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20131206/5ae87976/attachment.html>


Maggiori informazioni sulla lista Python