[Python] Perplesso su come è stato definito __init__: avete qualche spiegazione?
Ciao a tutti, mi sto studiando gli algoritmi che trovo qui: http://deeplearning.net/tutorial/lenet.html#lenet per adattarli a quello che sto facendo io ora. Nel far ciò ho delle perplessità riguardanti python che mi lasciano interdetto...: class LeNetConvPoolLayer(object): """Pool Layer of a convolutional network """ def __init__(self, rng, input, filter_shape, image_shape, poolsize=(2, 2)): io pensavo che: 1) le variabili messe tra parantesi, che sono quelle passate alla classe quando viene chiamata, dovessero obbligatoriamente essere tutte poi definite in __init__ , 2) e che tutte le variabili definite all'interno di __init__ fossero tutte variabili dell'instanza della classe e,. per questo, dovessero avere self invece: a) tra tutte le variabili in def __init__ (self, rng, input, filter_shape, image_shape, poolsize=(2, 2)): solo self.input = input e poolsize sono definite b) solo alcune delle variabili all'interno di __init__ sono state definite con self. Quali potrebbero essere i motivi che hanno portato a definire in questo modo le variabili in __init__? Vi ringrazio. Marco ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Perplesso su come è stato definito __init__: avete qualche spiegazione?
Il giorno 12 gennaio 2015 10:20, Marco Ippolito ha scritto: > Ciao a tutti, > mi sto studiando gli algoritmi che trovo qui: > http://deeplearning.net/tutorial/lenet.html#lenet per adattarli a > quello che sto facendo io ora. > > Nel far ciò ho delle perplessità riguardanti python che mi lasciano > interdetto...: > > class LeNetConvPoolLayer(object): > """Pool Layer of a convolutional network """ > > def __init__(self, rng, input, filter_shape, image_shape, poolsize=(2, > 2)): > > io pensavo che: > 1) le variabili messe tra parantesi, che sono quelle passate alla > classe quando viene chiamata, dovessero obbligatoriamente essere tutte > poi definite in __init__ , 2) e che tutte le variabili definite > all'interno di __init__ fossero tutte variabili dell'instanza della > classe e,. per questo, dovessero avere self > invece: > a) tra tutte le variabili in def __init__ > (self, rng, input, filter_shape, image_shape, poolsize=(2, 2)): > solo self.input = input e poolsize sono definite > b) solo alcune delle variabili all'interno di __init__ sono state > definite con self. > > Quali potrebbero essere i motivi che hanno portato a definire in > questo modo le variabili in __init__? > perchè mai tutti i valori passati ad init dovrebbero poi essere "salvati" anche come attributi dell'istanza? ad esempio il valore di filter_shape viene semplicemente utilizzato nella funzione __init__ ed, evidentemente, non c'è alcun bisogno di "ricordarselo" associandolo in modo continuativo all'oggetto creato ciao, Marco ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Perplesso su come è stato definito __init__: avete qualche spiegazione?
mi sto studiando gli algoritmi che trovo qui: > http://deeplearning.net/tutorial/lenet.html#lenet per adattarli a > quello che sto facendo io ora. > > Nel far ciò ho delle perplessità riguardanti python che mi lasciano > interdetto...: > > class LeNetConvPoolLayer(object): > """Pool Layer of a convolutional network """ > > def __init__(self, rng, input, filter_shape, image_shape, poolsize=(2, > 2)): > > io pensavo che: > 1) le variabili messe tra parantesi, che sono quelle passate alla > classe quando viene chiamata, dovessero obbligatoriamente essere tutte > poi definite in __init__ , Tra parentesi dopo il nome della classe trovi le classi da cui eredita, se non specifichi nulla prende per buono che vuoi usrae la classe base Object > 2) e che tutte le variabili definite > all'interno di __init__ fossero tutte variabili dell'instanza della > classe e,. per questo, dovessero avere self > invece: > a) tra tutte le variabili in def __init__ > (self, rng, input, filter_shape, image_shape, poolsize=(2, 2)): > solo self.input = input e poolsize sono definite > b) solo alcune delle variabili all'interno di __init__ sono state > definite con self. > Self e' il puntatore all'istanza corrente. Esempio class Pinco(): . a = Pinco() b = Pinco() a.valore1 = 10 b.valore1 = 20 Come fa aa capire se valore1 che stiamo usando e' di a o di b? Con self che punta ad a o a b. Le variabilile definisci dopo la dichiarazione class Pinco(): class Pinco(): valore1 = None valore2 = None def __init__(v1, v2): self.valore1 = v1 self.valore2 = v2 In questo modo nel momento in cui crei l'oggetto passi come parametri i valori contenuti nella chiamata a __init__ che e' un Magic Method (ce ne sono anche altri) che vengono assegnati alle variabili dell'istanza. Carlos -- EZLN ... Para Todos Todo ... Nada para nosotros ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Perplesso su come è stato definito __init__: avete qualche spiegazione?
ciao Marco, grazie per darmi delle spiegazioni. Nella mia "infinita" ignoranza, pensavo che tutto ciò che fosse definito in __init__ fosse automaticamente "associato" in modo continuativo all'oggetto creato. A quanto pare non è proprio così. Marco Il 12 gennaio 2015 10:29, Marco De Paoli ha scritto: > > > Il giorno 12 gennaio 2015 10:20, Marco Ippolito > ha scritto: > >> Ciao a tutti, >> mi sto studiando gli algoritmi che trovo qui: >> http://deeplearning.net/tutorial/lenet.html#lenet per adattarli a >> quello che sto facendo io ora. >> >> Nel far ciò ho delle perplessità riguardanti python che mi lasciano >> interdetto...: >> >> class LeNetConvPoolLayer(object): >> """Pool Layer of a convolutional network """ >> >> def __init__(self, rng, input, filter_shape, image_shape, poolsize=(2, >> 2)): >> >> io pensavo che: >> 1) le variabili messe tra parantesi, che sono quelle passate alla >> classe quando viene chiamata, dovessero obbligatoriamente essere tutte >> poi definite in __init__ , 2) e che tutte le variabili definite >> all'interno di __init__ fossero tutte variabili dell'instanza della >> classe e,. per questo, dovessero avere self >> invece: >> a) tra tutte le variabili in def __init__ >> (self, rng, input, filter_shape, image_shape, poolsize=(2, 2)): >> solo self.input = input e poolsize sono definite >> b) solo alcune delle variabili all'interno di __init__ sono state >> definite con self. >> >> Quali potrebbero essere i motivi che hanno portato a definire in >> questo modo le variabili in __init__? > > > perchè mai tutti i valori passati ad init dovrebbero poi essere "salvati" > anche come attributi dell'istanza? > ad esempio il valore di filter_shape viene semplicemente utilizzato nella > funzione __init__ ed, evidentemente, non c'è alcun bisogno di "ricordarselo" > associandolo in modo continuativo all'oggetto creato > > ciao, > Marco > > > ___ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python > ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Perplesso su come è stato definito __init__: avete qualche spiegazione?
mille grazie Carlos della tua spiegazione. nel tuo esempio per passare alle variabili (definite dopo la dichiarazione della classe) i relativi valori si usa proprio self.nome_variabile_1 = valore_1, self.nome_variabileself_2 = valore_2 ed è proprio quello che mi aspettavo di vedere all'interno di def __init__(self, rng, input, filter_shape, image_shape, poolsize=(2, 2)): Ora ho capito che si possono anche definire le variabili all'interno di def __init__(): senza associarle in modo continuativo all'oggetto creato. Continuo comunque a non afferrarne l'utilità di definire variabili in __init__ senza associarle all'oggetto creato Marco Il 12 gennaio 2015 10:31, Carlos Catucci ha scritto: > mi sto studiando gli algoritmi che trovo qui: >> >> http://deeplearning.net/tutorial/lenet.html#lenet per adattarli a >> quello che sto facendo io ora. >> >> Nel far ciò ho delle perplessità riguardanti python che mi lasciano >> interdetto...: >> >> class LeNetConvPoolLayer(object): >> """Pool Layer of a convolutional network """ >> >> def __init__(self, rng, input, filter_shape, image_shape, poolsize=(2, >> 2)): >> >> io pensavo che: >> 1) le variabili messe tra parantesi, che sono quelle passate alla >> classe quando viene chiamata, dovessero obbligatoriamente essere tutte >> poi definite in __init__ , > > > Tra parentesi dopo il nome della classe trovi le classi da cui eredita, se > non specifichi nulla prende per buono che vuoi usrae la classe base Object > >> >> 2) e che tutte le variabili definite >> all'interno di __init__ fossero tutte variabili dell'instanza della >> classe e,. per questo, dovessero avere self >> invece: >> a) tra tutte le variabili in def __init__ >> (self, rng, input, filter_shape, image_shape, poolsize=(2, 2)): >> solo self.input = input e poolsize sono definite >> b) solo alcune delle variabili all'interno di __init__ sono state >> definite con self. > > > Self e' il puntatore all'istanza corrente. Esempio > > class Pinco(): > > . > > > a = Pinco() > b = Pinco() > > a.valore1 = 10 > b.valore1 = 20 > > Come fa aa capire se valore1 che stiamo usando e' di a o di b? Con self che > punta ad a o a b. > Le variabilile definisci dopo la dichiarazione class Pinco(): > > class Pinco(): > > valore1 = None > valore2 = None > > def __init__(v1, v2): > > self.valore1 = v1 > self.valore2 = v2 > > In questo modo nel momento in cui crei l'oggetto passi come parametri i > valori contenuti nella chiamata a __init__ che e' un Magic Method (ce ne > sono anche altri) che vengono assegnati alle variabili dell'istanza. > > Carlos > -- > EZLN ... Para Todos Todo ... Nada para nosotros > > ___ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python > ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Perplesso su come è stato definito __init__: avete qualche spiegazione?
2015-01-12 10:47 GMT+01:00 Marco Ippolito : > senza associarle in modo continuativo all'oggetto creato. > Continuo comunque a non afferrarne l'utilità di definire variabili in > __init__ senza associarle all'oggetto creato > Ad esempio per svolgere operazioni dentro __init__ Eseguo un ciclo, mi serve un indice, mica devo passarlo all'oggetto? Oppure ho una variabile di classe (static) condivisa tra tutti gli oggetti class Persona(): cognome = 'Rossi' nome = '' def __init__(self, nome): self.nome = nome def printPersona(self): print "%s %s" % (self.nome, self.cognome) mario = Persona('Mario') giovanni = Persona("Giovanni") anna = Persona("Anna") mario.printPersona() giovanni.printPersona() anna.printPersona() Provalo e vedi che ti stampa sempre Rossi come cognome. Carlos -- EZLN ... Para Todos Todo ... Nada para nosotros ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Perplesso su come è stato definito __init__: avete qualche spiegazione?
si grazie Carlos sono tutti della stessa famiglia Marco Il 12 gennaio 2015 11:37, Carlos Catucci ha scritto: > > 2015-01-12 10:47 GMT+01:00 Marco Ippolito : >> >> senza associarle in modo continuativo all'oggetto creato. >> Continuo comunque a non afferrarne l'utilità di definire variabili in >> __init__ senza associarle all'oggetto creato > > > Ad esempio per svolgere operazioni dentro __init__ > > Eseguo un ciclo, mi serve un indice, mica devo passarlo all'oggetto? > Oppure ho una variabile di classe (static) condivisa tra tutti gli oggetti > > class Persona(): > cognome = 'Rossi' > nome = '' > def __init__(self, nome): > self.nome = nome > def printPersona(self): >print "%s %s" % (self.nome, self.cognome) > > mario = Persona('Mario') > giovanni = Persona("Giovanni") > anna = Persona("Anna") > mario.printPersona() > giovanni.printPersona() > anna.printPersona() > > Provalo e vedi che ti stampa sempre Rossi come cognome. > > Carlos > -- > EZLN ... Para Todos Todo ... Nada para nosotros > > ___ > Python mailing list > Python@lists.python.it > http://lists.python.it/mailman/listinfo/python > ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python