OT Python3

non avevo capito nell’altro post dove parlavi dello scrittore della guida era lo stesso che ha scritto Python
beh come ho già fatto notare lui è l’unico che nell’esempio ha differenziato i nomi tra parametri e variabili.
quindi ha intuito che per un neofita poteva confondere le idee. Ottimo Van Rossum Promosso ahahahah

La classe non e’ acqua …

class Pippo:
    prova = 10
    def pluto(Pippo):
        if Pippo.prova is 10:
            print("ok")
Pippo().pluto()

ciao Emilio, giusto per continuare il discorso sul capire:
la sostituzione della parola chiave “self” ed il fatto di non aver associata una variabile con lo stesso nome della classe “Pippo” anche se il codice funziona, potrebbe dare problemi in un codice complesso?

ps oppure nessuno è stato cosi matto da fare questo tipo di prove ahahahah

ps ps ho provato che la formattazione del codice funziona anche senza la scritta Python

Cribbio !
… Ma sei terribile ! :wink:

Hehe … scherzo, bravo Salvio !
Fai benissimo ad essere curioso e a imparare il piu’ possibile del linguaggio.

… Io sono molto piu’ pigro … :blush:
Poi tutte ‘ste complicazioni sulla programmazione ad oggetti per me sono … troppo complicate, appunto. :smile:
Io gli oggetti li uso in maniera molto semplificata, per adesso mi trovo bene cosi’ … :slight_smile:
Quindi non sono il piu’ adatto per rispondere a questo tipo di domande …

Comunque … dopo una rapida ricerca … credo si tratti di un attributo di classe. ( Ma non ci giuro :wink: )

Se hai voglia, prova a cercare tu informazioni al riguardo … sorry … :slight_smile:

EDIT:

Si’, solo che se scrivi python dovrebbe colorare le diverse parole secondo la sintassi Python

Ma intendete formattazione qui su discourse o sull’editor di Rhino? (o da un’altra parte? mi son perso).
Comunque concordo con Emilio… complicare troppo annidando una roba all’interno dell’altra la vedo abbastanza complessa per poi capire dove ci siano degli errori… quindi, oggetti semplici e qualche riga in più.

Ciao Lucio !

Proprio quella ! :slight_smile:

Si’, certo, anch’io cerco sempre di usare variabili intermedie, molto comode per il debug :slight_smile:
E cerco di scrivere funzioni semplici in modo da ‘spezzettare’ i calcoli per quanto possibile … sempre per cercare di tener sotto controllo il tutto, passo per passo. :slight_smile:

Quanto agli … esoterismi che riesce a scrivere Salvio … :rofl:
Mi riferivo a tutto l’armamentario che mette a disposizione la programmazione ad oggetti, in generale, non solo parlando di Python.
Metodi di istanza, metodi di classe, proprieta’ varie, ereditarieta’, overloading, interfacce, ecc. ecc.

Io mi ci perdo decisamente !
Per cui in questi casi cerco di usare solo le cose piu’ semplici …

Ma e’ un problema mio, chi ha un adeguato numero di neuroni fa benissimo a sbizzarrirsi e a sfruttare tutte queste belle cose. :slight_smile:

Ah, mi accodo velocemente!
Si, chi programma tutto il giorno ed ha dimestichezza con il codice sicuramente vede gli script come una roba da ragazzini… ma noi in fondo in fondo siamo sempre dei ragazzini! :rofl:
Poi se Salvio si trova bene a fare le robe complesse, ben benga! Io intanto vi leggo e cerco di familiarizzare! :wink:

Hehe … Fornero sara’ senz’altro d’accordo !
:rofl:

:wink:

perchè Emilio mica vuoi andare in pensione, oggi non si chiama più la terza età ma la seconda gioventù
ahahahah :slight_smile:

tornando alle mie follie, ho postato l’esempio per indicare che la parola chiave “self” non è obbligatoria, ma è una dicitura variabile a scelta a quanto pare mentre vedendo gli esempi avevo capito diversamente.

Lucio invece è proprio l’incontrario, essendo che seguendo i vari esempi trovo difficoltà a capirli,
quindi cerco una specie di metodo personale :slight_smile: e lo faccio anche per una verifica nel senso che se scrivo una sintassi a modo mio, e il codice funziona significa che davvero ho capito come deve essere scritto.
cosi faccio sempre di sicuro è un mio limite ma con la testa dura che mi ritrovo diversamente non riesco :smiley:

Se usi self ti riferisci ad una istanza delle classe.
Se non usi niente, come nel tuo esempio, ti riferisci alla classe stessa.
Sono cose diverse.

Hehe … lo dicevo che la OOP e’ una brutta bestia … :smile:

Comunque fai bene ad imparare cosa solo gli attributi di classe.
In RhinoCommon userai anche i metodi cosiddetti ‘statici’, cioe’ i metodi di classe, non di oggetto. :slight_smile:

Se permetti un consiglio … Non fidarti di un singolo esempio. Possono intervenire molti fattori diversi.
In queste cose e’ molto facile prendere lucciole per lanterne … :slight_smile:

Emilioooooo quando credo di aver capito qualcosa riesci sempre a farmi tornare più confuso ahahahah

nel codice che ho postato ho sostituito “self” con lo stesso nome della classe cioè “Pippo”
ma posso anche mettere un altro nome a piacere il risultato funziona sempre

OK, usare il nome self e’ solo una convenzione.
Come dici giustamente, puoi usare un nome qualsiasi.
La regola e’ che il primo parametro dei metodi della classe rappresenta l’oggetto che richiama il metodo.
… Suppongo … :confused:

… Certo, andare ad usare proprio il nome della classe mi sembra un po’ … bizzarro … :smile:

E poi ti lamenti che Python consente di usare gli stessi nomi dei parametri nelle chiamate di funzione !
:rofl:

Altra cosa miportante in questo esempio secondo me e’ capire che prova e’ un attributo della classe e non di un oggetto appartenente alla classe …

… Beh … almeno credo … :confused:

Aiutoooooooo …
Qui serve un esperto di programmazione ad oggetti !

sapevo che sta cosa mi sarebbe tornata indietro come un boomerang ahahahah

EDIT:

ribadisco che faccio queste domande e posto questi esempi giusto per avere una conferma nel caso che se il codice diventasse più articolato funzioni lo stesso senza darmi problemi come a volte mi è successo :yum: che perdo un mucchio di tempo percorrendo una strada che all’inizio sembra buona poi scopro dopo giornate intere passate a provare e riprovare che quella strada invece è una strada senza uscite e vorrei evitarlo :slight_smile:

Mi vengono i brividi… sono quelle cose che alla fine non ti fanno capire più na mazza…

1 Mi Piace

Se fai degli script molto complessi, consiglio di crearsi un metodo per dare un nome alle variabili così da non incappare in situazioni ingarbugliate.
Inoltre, nella mia esperienza, parti di codice con procedure complesse vanno ampiamente commentate con eventuali implementazioni da fare in futuro o bug riscontrati (così rileggendo il codice individui subito dove andare a operare).
In alcuni script mi sono anche fatto dei mini “riassunti” in varie parti del codice dove mi evidenzio che valori si stanno portando dietro le variabili (tipo A=punto partenza, B=punto centro raggio ecc. ecc.).

Proprio cosi’ :confused:
… Io gia’ mi incasino abbondantemente di mio …

Credo che entro certi limiti sia inevitabile.
E’ molto difficile prevedere all’inizio cosa funzionera’ e cosa no in un programma.
Spesso l’unica cosa da fare e’ sperimentare e vedere in pratica quale strada conviene scegliere.
Senza spaventarsi se dovrai buttar via parecchio materiale. Mettilo in conto fin dall’inizio. :slight_smile:

Poi spesso questo ha ben poco a che fare con la sintassi e le caratteristiche del linguaggio.
Piuttosto con l’impostazione di dati, calcoli, interfaccia utente.
Certo una buona conoscenza del linguaggio serve, ma penso sia piu’ una questione ‘estetica’ , per cosi’ dire.
Cioe’ puoi trovarti a tuo agio con una certa impostazione, meno con un’altra.
Ma direi che non conviene intestardirsi su queste cose.
Pensa a come organizzare il programma, poi il modo di scriverlo in Python lo trovi, senza badare a qualche istruzione o qualche funzione in piu’ o in meno … A me Python sembra molto flessibile, spesso ti permette di fare le cose in modi diversi, basta cercarne uno che ti piace. :slight_smile:

Tutte opinioni personali, naturalmente … :slight_smile:

grazie Emilio per i cosigli e pareri
diciamo che nella teoria ho afferrato un pochino il ragionamento nella programmazione di Python
ora bisogna vedere se riesco a metterlo in pratica che sono due cose completamente diverse
però vedendo il bicchiere mezzo pieno già il fatto di riuscire a seguire il codice al cap8 del libro
mentre prima non ci riuscivo beh credo che già ho fatto un bel passettino in avanti giusto :slight_smile:

ps ho letto delle differenze sulle istanze non ho capito bene ma mi sembra parlassero delle istanze di classe se non erro “globali e non” e poi anche altri tipi di istanze e se ho capito bene si riferiscono anche ai tuoi esempi che hai postato all’inizio della discussione e quindi non si tratta solo di come impostare i parametri o la sintassi ma se ho intuito bene il risultato può cambiare dipende tutto da cosa si cerca di realizzare.

Mi sembra che al capitolo 8 parli di diverse cose, cioe’ di diversi aspetti degli oggetti di Python.
Comprese le istanze di classe, certo (che poi sono quelli che comunemente chiamiamo ‘oggetti’ )
C’e’ una cosa in particolare che ti interessa analizzare ?

beh Emilio per adesso non ho un problema specifico anche perchè sto solo facendo delle prove con i vari esempi che riesco a trovare. ma se proprio debbo essere sincero anche se ho capito varie cose su come ragiona python e quindi anche della sintassi da usare, sempre al cap.8 c’è questo esempio con il metodo “setattr”

class Cibo:
    def __init__(self, proteine=0, carboidrati=0, grassi=0):
        self.proteine = proteine
        self.carboidrati = carboidrati
        self.grassi = grassi
        
    def calcolaCalorie(self):
        return (self.proteine * 4 + self.carboidrati * 4 + self.grassi * 9)

pasta = Cibo(proteine=12, carboidrati=72, grassi=1)

def cuoci_cibo(self):
    self.cotta = True

metodo = "cuoci"
setattr(Cibo, metodo, cuoci_cibo) 

pasta.cuoci()
print(pasta.cotta)

ora fino all’istanza di variabile “pasta” (se non erro si chiama così) mi dovrebbe essere tutto chiaro

mentre poi è stata creata un’altra definizione con un’attributo “cotta” col valore “True”
ma subito dopo vedo un intreccio che non comprendo come mai è stato fatto in questo modo?
essendo che se non sbaglio è quasi simile al tuo esempio di “setattr” postato sopra giusto?