Salve a tutti sono un nuovo iscritto alla mailing lista.Ho bisogno di un aiuto 
per capire come andare avanti in un esercizio assegnatoci all'universita'.In 
pratica devo creare una classe che preso in input un file HTML mi genera 
l'albero Html della stessa e poi farci diverse operazioni sopra come contare 
nodi e cose simili.Ho gia' fatto un esercizio simile ma senza usare due classi 
ma usando una classe sola e una funzione esterna che gli passa il file HTML e 
va bene.Purtroppo quando sostituisco alla funzione esterna la classe che mi 
chiede l'esercizio iniziano i problemi.Metto l'esempio funzionanteimport html

class HTMLNode(object):
    def __init__(self, tag, attr, content, closed=True):
       self.tag = tag
       self.attr = attr # dizionario degli attributi, se non ci
       # sono, e' un dizionario vuoto
       self.content = content # se tag = '_text_' contiene il testo,
       # altrimenti una lista dei nodi figli
       self.closed = closed # True se il nodo ha la chiusura

    def istext(self): # per distinguere i nodi testo
        return self.tag == '_text_'

    def print_tree(self, level=0):
        '''Stampa l'albero mostrando la struttura tramite indentazione'''
        print ' '*level+str(self),
        if self.istext():
            print repr(self.content)
        else:
            print 
            for node in self.content:
                node.print_tree(level+1)

    def __str__(self):
    '''Ritorna una rapprentazione testuale del nodo'''
        left, right = ('', '') if self.tag == '_text_' else ('<', '>')
        s = left+self.tag
        for k, v in self.attr.items():
            s += ' '+k+'="'+v+'"'
        return s + right

    def count(self):
    '''Ritorna il numero di nodi dell'albero'''
        cnt = 1
        if not self.istext():
            for node in self.content:
                cnt += node.count()
            return cnt

def ParsedHTML(htmlfile):
'''Esegue il parsing HTML del file fhtml e ritorna la radice
dell'albero di parsing'''
    with open(htmlfile, 'U') as f:
        root = html.parse(f.read(), HTMLNode)
    return root
###########################################################################

p = ParsedHTML('file03_01_in.html')
print p.print_tree()
print p.count()
Questo va bene.Il problema è che devo fare la stessa cosa però cambiando al 
posto di DEF PARSEDHTML metterci una classe PARSEDHTMLQualcosa di simileclass 
ParsedHTML(object):
    def __init__(self, htmlfile):
        with open(htmlfile, 'U') as f:
            root = html.parse(f.read(), HTMLNode)

L'albero me lo crea ma non so poi come fare il count, in pratica non so come 
interagirci con l'albero appena creato perche' se faccio p.count mi dice che la 
mia classe non ha l'attributo count.Avevo pensato di fare una def count anche 
sotto questa classe che mi richiamasse la prima ma non riesco a ricavarmi i 
dati del primo costruttore per poi lavorarci su. Dove sbaglio? Come posso 
interagire con l'albero appena creato? Qualcuno può aiutarmi a capire? Grazie 
mille
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a