[Python] Passaggio oggetti tra classi

De Santis Luca farolfo a hotmail.com
Ven 6 Dic 2013 20:09:48 CET


Grazie delle dritte, ho provveduto creare una situazione simile così è più semplice da passare.


Non posso usare python 2.7 perché devo usare per forza la versione 2. Questa classe è un esercitazione per l’università. Prima che mi diate del “bimbo-minchia” che non ha voglia di studiare volevo dirvi solo che ho più di 40 anni, sono padre di famiglia e mi alzo alle 6.00 di mattina per andare al lavoro, quindi ho un po di tempo per programmare solo la sera. Se potessi andare a lezione bastava far vedere il codice al prof che ti spiegava l’errore e ti diceva come intervenire, purtroppo però i corsi sono di mattina. Devo consegnare questa roba per il 10/12 e spero di finire perché vorreri avere un po di tempo per affinare il codice. Oltretutto provengo da .net e programmo per passione perché faccio un lavoro che con l’informatica non c’entra nulla.  


Ora che vi ho tediato con le mie vicissitudini personali riprendiamo il filo del discorso, quando  lancio lo script ottengo un errore di tipo AttributeError: 'NoneType' object has no attribute 'nomeNodo', quindi il nodo padre non viene inizializzato.


il sorgente è questo:






import math


class WNode(object):
    def __init__(self,w):
        self.nomeNodo = w
        self.sottoNodi = []
        self.nodoGenitore=None
    def __str__(self):
        return self.nomeNodo 
    def __repr__(self):
        return 'WNode("'+self.nomeNodo+'")'
   
    #ritorna il numero di nodi dell'albero.
    def count(self):
        ret = 1
        for node in self.sottoNodi:
            ret += node.count()
        return ret


    def path(self,w):
        ret = []
        prec=""
        self._path(self,w)
        return ret


    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)
        
#Lista per dizionario parole nel file
Righe=['posta','sposta','esposta','sposata','spossata','spostata',
'spostai','spostati','spostarti','spostasti','spostavi',
'spostarvi','posata','posita']
    
def gen_wtree(wfile, word):
    return _generaAlbero(word)


#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


#Ricerca parole nel file dizionario
def _BinarySearch(word):
    return word in Righe


ret=gen_wtree("","posta")
print ret.count()
ret.path("spostata")


La funzione _BinarySearch è farlocca in quanto in realtà faccio una ricerca binaria su una lista di circa 270.000 parole, l’ho sostituita perché preleva tali parole da un file esterno. Tale file viene utilizzato per riempire la lista Righe=[] che qui ho inizializzato nel codice con le sole parole che servono all’esempio. La classe contiene molte altre funzioni che ho eliminato per compattare il codice da mettere qui


Luca





Da: Dario Bertini
Data invio: ‎venerdì‎ ‎6‎ ‎dicembre‎ ‎2013 ‎19‎:‎16
A: Mailing List Python





1- why not Python3?
2- Ottieni un AttributeError (non puoi accedere a nomeNodo perchè
nodoGenitor è None) o un TypeError (non puoi concatenare str e None:
nodoGenitore.nomeNodo è None)?
2b- in futuro ricordati di copiare il messaggio d'errore che hai: così
facendo è più facile capire cosa vada effettivamente storto
3- incolla il codice completo o, meglio ancora, usa qualcosa come
http://ideone.com/ in modo che possiamo riprodurre il problema
facilmente
3b- se il codice è troppo lungo per essere incollato tutto ed essere
comprensibile, è sintomo che dovresti semplificarlo... inizia creando
un caso di test ridotto, magari è possibile che nel processo tu stesso
capisca dove si trova il problema

(non penso che l'errore sia nel nomeNodo, ma effettivamente nel
genitore che è None, ma così sui 2 piedi non so dove sia
effettivamente il problema)


-- 
xmpp: berdario a gmail.com
bitmessage: BM-2cTYXfGiSTsnx3righ6aHcJSWe4MV17jDP
gpg fingerprint: 3F8D53518012716C4EEF7DF67B498306B3BF75A0 (used just
for signing commits)
_______________________________________________
Python mailing list
Python a lists.python.it
http://lists.python.it/mailman/listinfo/python
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20131206/a2102606/attachment-0001.html>


Maggiori informazioni sulla lista Python