Forum >> Principianti >> Inizializzazione classe

Pagina: 1

Ciao a tutti, scusate la domanda da principiante.

Una classe con costruttore __init__ viene inizializzata quando si invoca o all’esecuzione dello script?

Scusate se non uso i termini corretti, non mi è facile impararli.


PS. Non ho trovato come fare una ricerca nel forum, come si fa?

Davide
Ciao, ti ho corretto il messaggio, evita se puoi in futuro di fare copia ed incolla da cose tipo MS Word o affini.

Dunque non ho capito bene cosa intendi, hai usato termini non corretti in effetti, vediamo se riesco a risponderti ugualmente. Semplicemente __init__ è un metodo, definito metodo costruttore, che contiene il codice eseguito automaticamente quando viene creata un'istanza di una classe.


Meglio fare un esempio?

>>> class Cane:
...    def __init__(self, nome, razza):
...        self.nome = nome
...        self.razza = razza
...
>>> miocane = Cane("Lillo", "Collie")
>>> tuocane = Cane("Charlie","Pincher")
>>> miocane.nome
Lillo
>>> miocane.razza
Collie
>>> tuocane.nome
Charlie
>>> tuocane.razza
Pincher

Vogliamo farla ancora più facile per farti capire al volo?
>>> class Stampa:
...     def __init__(self):
...         print("Sono __init__ e me ne vanto")
...
>>> miainstanza = Stampa()
Sono __init__ e me ne vanto
Credo sia intuibile il tutto, appena viene istanziata la classe Stampa() questa automaticamente esegue il print() in essa contenuta.

Cya


> Una classe con costruttore __init__ viene inizializzata quando si invoca o all’esecuzione dello script?


Uhm. Daniele ti ha dato le coordinate, ma non ho capito se questa domanda è profonda oppure è solo una coincidenza dovuta all'uso scorretto dei termini...

Allora, la risposta "da principianti" è che una classe NON viene inizializzata. E' un OGGETTO che viene inizializzato, non la classe. E l'oggetto viene inizializzato al momento della sua creazione. E per inizializzare l'oggetto Python esegue il codice contenuto nel metodo __init__, come detto da Daniele. (Nota tecnica: "creazione" e "inizializzazione" non sono sinonimi, eh? Prima l'oggetto viene creato, poi viene inizializzato. Il metodo __init__ non viene eseguito al momento della creazione dell'oggetto, ma al momento della sua inizializzazione. Ma dal punto di vista dell'utente "principiante" questa distinzione può essere ignorata).


Il punto in cui, invece, mi era venuto un dubbio, è questo: stai forse chiedendo se il codice del metodo __init__ viene valutato a runtime o a import time? Questa sarebbe una domanda più complessa, ma appunto forse non era questo che volevi dire. Il punto qui è che ci sono dei pezzi di codice che Python valuta "subito" (a import time, come si dice, ovvero quando il modulo viene importato o eseguito), e dei pezzi di codice che Python valuta "dopo" (a runtime, ovvero solo quando vengono esplicitamente chiesti da altro codice). I metodi di istanza (e quindi anche il metodo __init__) è valutato a runtime, quindi il codice che ci metti dentro viene eseguito solo quando effettivamente crei l'oggetto. Attenzione però che per esempio i metodi di classe sono valutati a import time, ovvero il codice che ci metti è eseguito quando importi il modulo che contiene la classe.


Se tutto questo per te non ha nessun senso, allora come non detto. Basta la risposta di Daniele.



Pagina: 1



Esegui il login per scrivere una risposta.