Forum >> Principianti >> Comportamento della Classe

Pagina: 1

Buongiorno, cancellate per cortesia il mio precendente messaggio, e' fonte di un copia incolla errato.



In questo invece chiedo come mai mi stampa anche un "none" seguendo il codice :

class Dissolvenze:
    global a
    a=[]
    
    def __init__(self,fase):
        self.fase = fase

    
    def calcolo(self,stato,inizio,fine):
        self.stato = stato
        self.inizio = inizio
        self.fine = fine
        print(self.fase , self.stato , self.inizio * self.fine)
        for i in range (0,self.fine):
            a.append(i)
        print (a)
            

alba = Dissolvenze("alba")
giorno = Dissolvenze("giorno")
tramonto = Dissolvenze("tramonto")
notte = Dissolvenze("notte")

print (alba.calcolo(1,10,20))
print(giorno.calcolo(2,50,60))
Grazie
------
Alberto
In questo invece chiedo come mai mi stampa anche un "none" seguendo il codice :
Il "fenomeno" è la modalità normale di funzionamento delle funzioni (o dei metodi), se non vi è una istruzione return esplicita viene comunque restituito None, guarda il 3° paragrafo nella docs in link.




Nel Tuo metodo "calcolo" della classe "Dissolvenze" non hai definito alcuna istruzione "return", quindi la print esterna alla classe, correttamente, stampa ciò che viene restituito : None




Per altro, analizza meglio ciò che vuoi fare, se vuoi stampare esternamente il "calcolo" della Tua classe, restituiscilo, non stamparlo all'interno del metodo. Esempio :

>>> class Dissolvenze:
    global a
    a=[]
    
    def __init__(self,fase):
        self.fase = fase

    
    def calcolo(self,stato,inizio,fine):
        self.stato = stato
        self.inizio = inizio
        self.fine = fine
        print(self.fase , self.stato , self.inizio * self.fine)
        for i in range (0,self.fine):
            a.append(i)
        return a

>>> alba = Dissolvenze('alba')
>>> giorno = Dissolvenze('giorno')
>>> tramonto = Dissolvenze('tramonto')
>>> notte = Dissolvenze('notte')
>>> print(alba.calcolo(1,10,20))
alba 1 200
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> print(giorno.calcolo(2,50,60))
giorno 2 3000
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59]
>>> 


Fatti non foste a viver come bruti...
Grazie, Nuzzopippo.... quindi la mia variabile/lista "a" in pratica viene passata come valore restituito alla mia chimata:



alba.calcolo(1,10,20).... giusto ?




Scusa ma è un po' che cerco di approfondire le classi ma mi risulta difficile (pur avendo letto piu' di una guida) non mi diventano chiare.

Posso chiederti altre delucidazioni se ho dubbi ?

Grazie
------
Alberto
Scusa, mi spieghi cosa ho combinato x avere 2 volte l'ultimo risultato in due chiamate diverse (se io le associo ad una variabile) ?



class Dissolvenze:
    global a
    a=[]
    
    def __init__(self,fase):
        self.fase = fase

    
    def calcolo(self,stato,inizio,fine):
        self.stato = stato
        self.inizio = inizio
        self.fine = fine
        print(self.fase , self.stato , self.inizio * self.fine)
        for i in range (0,self.fine):
            a.append(i)
#        print (a)
        return a
            

alba = Dissolvenze("alba")
giorno = Dissolvenze("giorno")
tramonto = Dissolvenze("tramonto")
notte = Dissolvenze("notte")

al = alba.calcolo(1,10,20)
gi = giorno.calcolo(2,50,60)

print(alba.calcolo(1,10,20))
print(giorno.calcolo(2,50,60))
print("===============================")
print(al)
print("---------------------------------")
print(gi)

Perchè il valore di "al" e di "gi" .... sono uguali... non dovrebbero esserlo ... dove sta l'errore ?

Grazie


------
Alberto
Scusa, mi spieghi cosa ho combinato x avere 2 volte l'ultimo risultato in due chiamate diverse (se io le associo ad una variabile) ?

class Dissolvenze:
    global a
    a=[]
    
    def __init__(self,fase):
        self.fase = fase

    
    def calcolo(self,stato,inizio,fine):
        self.stato = stato
...

Perchè il valore di "al" e di "gi" .... sono uguali... non dovrebbero esserlo ... dove sta l'errore ?

Nella modalità di dichiarazione di "a", a parte che la dichiari globale, la dichiari pure come variabile di classe, tal tipo di dichiarazione fa si che venga "manipolata" da tutte le istanze di oggetti "Dissolvenze" creati, ognuna di tali istanze ci appende i suoi dati.

Se tale NON È il tuo obiettivo dovresti dichiararla quale variabile di istanza, p.e. nello __init__ come "self.a" ed utilizzarla come tale.




Purtroppo, la OOP non è un argomento "leggero", andrebbe affrontata con il sussidio di un buon libro. Al momento penserei che dovresti acquisire informazioni circa lo scope (visibilità) delle variabili, oltre che approfondire sulle classi.




Ciao :)

Fatti non foste a viver come bruti...
Grazie Nuzzopippo, ed è quello che sto cercando di fare però .... :



i libri che ho acquistato e letto (chiaramente non finiti) non mi danno tutte le informazioni necessarie per capire le classi (almeno le info che servirebbero a me) ; negli esempi passano dal "cosi" al "cosa" come se fosse scontato (magari lo è , per chi le classi già le conosce) , ma questo mi impedisce di capire il senso LOGICO di quello che stanno spiegando. (aggiungi che ormai non sono piu' giovanissimo e abbiamo fatto bingo).




Tu avresti qualche testo/articolo da consigliarmi ? Per poter approfondire in modalità "rincoglionito" la comprensione delle classi; se possibile in ITALIANO (ma per qualche info può andare anche in inglese, anche se non lo mastico molto).




Io ho acquistaìto 3 libri :




- PYTHON guida completa (Marco Buttu)

- imparare PYTHON (Mark Lutz)

- Python x tutti (Charles Severance)




Forse sono DURO io (ne sono certo) ma non riesco a focalizzare la classi.




Scusa per il pippone.




Grazie



------
Alberto
i libri che ho acquistato e letto (chiaramente non finiti) non mi danno tutte le informazioni necessarie per capire ...
Tu avresti qualche testo/articolo da consigliarmi ? Per poter approfondire in modalità "rincoglionito" la comprensione delle classi; se possibile in ITALIANO...
Capisco le Tue difficoltà, ci incappo spesso, son "duretto", vecchietto e non anglofono a mia volta.

Temo di non essere uno dei più indicati a darTi suggerimenti in ambito "OOP & Python", la mia conoscenza della programmazione ad oggetti è "pratica" oltre che nata e cresciuta in ambito java, dal quale ho ereditato la stragrande maggioranza dei concetti, concetti sviluppati in un lasso di tempo lunghissimo e dei quali sto ancora adattando l'aderenza alle particolarità del python.
Dei testi che hai indicato, ho trovato più volte buone opinioni sul Lutz, gli altri due non li conosco ... riguardo la OOP, rimanendo nell'ambito Java, vi è un testo italiano di Claudio De Sio che è stato il mio "enty-point" : Object Oriented && Java 5

Comprai tale testo appena uscito tanti anni fa e lo trovai molto utile, credo che concettualmente sia molto valido, anche se rimane comunque tanto altro da approfondire, ora il De Sio ne rende disponibile il pdf, vale la pena di dargli una occhiata ... nell'ambito python devo, purtroppo, passare la palla ad altri utenti con migliori cognizioni delle mie, io mi sbatto parecchio sulla documentazione (tutta in inglese) per "rifinire" all'occorrenza i miei dubbi.




- Edit - Mi è venuto in mente l'ottimo lavoro di traduzione del tutorial effettuato da @RicPol (grazie Ric), li lo scope delle variabili è trattato, leggiti l'intero capitolo 9, tratta delle classi e potrebbe esserTi utile, comunque, per quanto si legga, riflessione e prove sono sempre indispensabili


In ogni caso, per quel che si può si è a disposizione circa "dubbi pratici" (teoricamente c'è molto da imparare), se non ci si aiuta tra vecchietti ... ;)

Ciao



--- Ultima modifica di nuzzopippo in data 2021-06-03 07:55:32 ---
Fatti non foste a viver come bruti...


Pagina: 1



Esegui il login per scrivere una risposta.