Go Back   UseSrv Message Forum > Italiano > Computers - Italiano > Python - Italiano
 

 
Thread Tools Display Modes
  #1  
Old 07-16-2008
Gianluca Sartori
Guest
 
Posts: n/a
Default Thinking in Python

Ciao ragazzi,

da newbe quale sono e considerato il fatto che vengo da Java e quindi
penso in java mi trovo a volte in difficoltà a ragionare secondo le
logiche del serpentone. Questo penso limiti molto le mie
performance di "fantasia" e la "creatività". Mi chiedevo se qualcuno
fosse già passato per questa strada e se avesse parole di saggezza da
pronunciare.

In particolare trovo quantomeno strano e mi piacerebbe sapere quali
politiche utilizzare, rispetto al non supporto per l'incapsulamento.

Trovo difficile capire le vere utilità di una metaclasse.

Come implemento vari design pattern se non ho supporto di classi
astratte?

Davvero le convenzioni sostituiscono le regole e le regole vincolano la
libertà creativa. Di fatto però faccio fatica a capire le regole del
gioco (i tasti del pianoforte, le caselle della scacchiera, il volante e
il cambio)

Mi rendo conto che questo post sembri strano a tutti voi che già di
serpenti ve ne intendete :P ma vorrei crearmi una sovrastruttura
pythonica in modo da poterne sfruttare appieno le potenzialità.

Grazie a qualsiasi persona riesca a rispondere a questo post senza darmi
del matto

Gianluca
  #2  
Old 07-16-2008
Alex Martelli
Guest
 
Posts: n/a
Default Re: Thinking in Python

Gianluca Sartori <gl.sartori@tiscali.it> wrote:
...
> In particolare trovo quantomeno strano e mi piacerebbe sapere quali
> politiche utilizzare, rispetto al non supporto per l'incapsulamento.


Usa una sottolineatura iniziale per i nomi degli attributi che non fanno
parte della "interfaccia pubblicata" di una classe o modulo. Non
ravanare con attributi cosi` denominati in altre classi o moduli.
Punto.

> Trovo difficile capire le vere utilità di una metaclasse.


Secondo Tim Peters, il 90% degli utenti non he ha bisogno. Se non
capisci l'utilita` probabilmente sei entro quel 90% e puoi serenamente
evitare di preoccupartene.

> Come implemento vari design pattern se non ho supporto di classi
> astratte?


Su www.strakt.com trovi varie mie presentazioni su alcuni design pattern
in Python, e noterai che non uso classi astratte. Comunque, se le vuoi,
fai una classe in cui ogni metodo che vorresti astratto ha come body

raise NotImplementedError

Questo indica che quei metodi devono essere soggetti ad override.

Se vuoi che un mancato override causi errore al momento stesso della
creazione della classe, beh, questo puo` essere un buon uso per una tua
metaclasse custom, appunto. In generale, una metaclasse custom puo`
servire per cambiare un pochino le regole del gioco relativamente alle
classi che usano quella metaclasse custom e loro istanze. Il 90% degli
utenti non ne ha bisogno, ma c'e` sempre il restante 10%;-).


Alex
  #3  
Old 07-16-2008
gabriele renzi
Guest
 
Posts: n/a
Default Re: Thinking in Python

Gianluca Sartori ha scritto:

> Ciao ragazzi,
>
> da newbe quale sono e considerato il fatto che vengo da Java e quindi
> penso in java mi trovo a volte in difficoltà a ragionare secondo le
> logiche del serpentone. Questo penso limiti molto le mie
> performance di "fantasia" e la "creatività". Mi chiedevo se qualcuno
> fosse già passato per questa strada e se avesse parole di saggezza da
> pronunciare.


probabilmente tutti
Citando a memoria da A.J. Perlis, se un linguaggio non cambia il modo in
cui pensi non serve a niente impararlo

> In particolare trovo quantomeno strano e mi piacerebbe sapere quali
> politiche utilizzare, rispetto al non supporto per l'incapsulamento.


Parli dell'asenza di public/private/protected ?

> Trovo difficile capire le vere utilità di una metaclasse.


cerca esempi ad esempio sul python cookbook. La prima cosa che mi
viene in mente è (leggendo la dom seguente) il singleton pattern.
Se in java devi avere controllo sopra l'allocazione di un oggetto sei
costretto a scriverti un metodo statico tipo getInstance(), perché non
puoi controllare il funzionamento di 'new'. In python puoi trasformare
una classe qualunque in una classe che genera oggetit singleton
semplicemente aggiungendo una linea __metaclass__=SingletonMeta.

> Come implemento vari design pattern se non ho supporto di classi
> astratte?


il fatto che il compilatore no dia errore non significa che tu no possa
creare classi astratte.

Semplicemente, ometti la dichiarazione dei metodi astratti o definiscilo
come un 'raise NotImplemented'.


> Davvero le convenzioni sostituiscono le regole e le regole vincolano la
> libertà creativa. Di fatto però faccio fatica a capire le regole del
> gioco (i tasti del pianoforte, le caselle della scacchiera, il volante e
> il cambio)


non ho capito una mazza ma perdonami son sveglio da poco :/

> Mi rendo conto che questo post sembri strano a tutti voi che già di
> serpenti ve ne intendete :P ma vorrei crearmi una sovrastruttura
> pythonica in modo da poterne sfruttare appieno le potenzialità.
>
> Grazie a qualsiasi persona riesca a rispondere a questo post senza darmi
> del matto


matto!
  #4  
Old 07-16-2008
Alex Martelli
Guest
 
Posts: n/a
Default Re: Thinking in Python

gabriele renzi <rff_rff@remove-yahoo.it> wrote:
...
> Citando a memoria da A.J. Perlis, se un linguaggio non cambia il modo in
> cui pensi non serve a niente impararlo


....eccetto che ti permette di essere N volte piu` produttivo...!

Python non ha cambiato il modo in cui pensavo, gia` forgiato da
vent'anni di programmazione in una notevole varieta` di linguaggi,
compresi linguaggi di altissimo livello dall'APL al Rexx a vari Lisp e
Scheme a Perl o Awk, e altri come Fortran, Pascal, C, C++, Java, per non
dire degli assembler. Quello che ha fatto invece e` darmi un ambiente
dove tutto funziona _come io mi aspetto_ sulla base di questo background
di esperienza e di studio.

Come primo progetto in Python, per impararlo un po', mi ero tenuto un
weekend intero, essendo la mia ragazza di allora in viaggio, per
realizzare un piccolo sito web in grado di offrire al visitatore alcuni
calcoli di aritmetica combinatoria relativa al bridge, in piu` lingue.

Non finiro` certo il progetto, mi dicevo, ma dal venerdi` alle 5 alla
domenica a mezzanotte, con pizze a domicilio e il frigo pieno di
prosciutto, cavolo, una trentina d'ore di pratica e studio me le faccio,
comincero` a capire se questo linguaggio fa per me.

Alle 11 di mattina del sabato (e con una normale notte di sonno in
mezzo) era tutto fatto -- circa 10 ore, altro che 30. Mi ero fatto il
mio sistemino di templating (poi pubblicato come YAPTU sul Cookbook), la
libreria di calcolo che mi serviva (ottima per l'interattivo, non
abbastanza performante per grossi calcoli batch, appunto piu` avanti
feci gmpy), le CGI che usavano questi componenti. Avevo imparato
abbastanza Python in 10 ore, senza quasi aprire i manuali; semplicemente
provando interattivamente se si faceva cosi` e cosa` e plac, 90% il
primo tentativo funzionava. Ovviamente conoscevo gia` benino il settore
applicativo e le tecnologie dell'HTML e del CGI, imparare anche quelle
in 10 ore oltre a tutto il resto sarebbe stato troppo. Ma nonostante
tutti gli anni e l'esperienza di perl, C++, eccetera, Python era
semplicemente _piu` adatto_ di ogni altro linguaggio che mai io avessi
provato, per permettermi di trasformare idee in programmi funzionanti.

Cambiato il mio modo di pensare? No, Python era il linguaggio che
_incorporava_ il mio modo di pensare, formato nella forgia degli studi e
dell'esperienza. Cosi` e` iniziata una storia d'amore tutt'ora
fiorente...

> > In particolare trovo quantomeno strano e mi piacerebbe sapere quali
> > politiche utilizzare, rispetto al non supporto per l'incapsulamento.

>
> Parli dell'asenza di public/private/protected ?


"Ah, come respiro!"...;-)


> > Trovo difficile capire le vere utilità di una metaclasse.

>
> cerca esempi ad esempio sul python cookbook. La prima cosa che mi
> viene in mente è (leggendo la dom seguente) il singleton pattern.


Borg e` meglio!-)

> Se in java devi avere controllo sopra l'allocazione di un oggetto sei
> costretto a scriverti un metodo statico tipo getInstance(), perché non
> puoi controllare il funzionamento di 'new'. In python puoi trasformare
> una classe qualunque in una classe che genera oggetit singleton
> semplicemente aggiungendo una linea __metaclass__=SingletonMeta.


Vero, ma i problemi di Singleton, che Borg risolve, restano tutti.

Comunque, __metaclass__ = MetaBorg e vai;-).


> > Come implemento vari design pattern se non ho supporto di classi
> > astratte?

>
> il fatto che il compilatore no dia errore non significa che tu no possa
> creare classi astratte.


Giusto.

> Semplicemente, ometti la dichiarazione dei metodi astratti o definiscilo
> come un 'raise NotImplemented'.


No!!! raise NotImplementedError, invece. L'oggetto NotImplemented e`
fatto per RESTITUIRLO (con dei return) da metodi che non sanno cosa fare
coi loro argomenti, cosi` che Python provi se possibile qualcosa
d'altro; NON e` una eccezione e c'entra poco con le classi astratte.
NotImplementedError e` l'eccezione.


Alex
  #5  
Old 07-16-2008
gabriele renzi
Guest
 
Posts: n/a
Default Re: Thinking in Python

Alex Martelli ha scritto:

> gabriele renzi <rff_rff@remove-yahoo.it> wrote:
> ...
>
>>Citando a memoria da A.J. Perlis, se un linguaggio non cambia il modo in
>>cui pensi non serve a niente impararlo

>
>
> ...eccetto che ti permette di essere N volte piu` produttivo...!
>
> Python non ha cambiato il modo in cui pensavo, gia` forgiato da
> vent'anni di programmazione in una notevole varieta` di linguaggi,
> compresi linguaggi di altissimo livello dall'APL al Rexx a vari Lisp e
> Scheme a Perl o Awk, e altri come Fortran, Pascal, C, C++, Java, per non
> dire degli assembler. Quello che ha fatto invece e` darmi un ambiente
> dove tutto funziona _come io mi aspetto_ sulla base di questo background
> di esperienza e di studio.


beh ma c'è cmq il passaggio a "non c'è bisogno che cambi il mio modo di
pensare"

<megasnip>



>>Se in java devi avere controllo sopra l'allocazione di un oggetto sei
>>costretto a scriverti un metodo statico tipo getInstance(), perché non
>>puoi controllare il funzionamento di 'new'. In python puoi trasformare
>>una classe qualunque in una classe che genera oggetit singleton
>>semplicemente aggiungendo una linea __metaclass__=SingletonMeta.

>
>
> Vero, ma i problemi di Singleton, che Borg risolve, restano tutti.
>
> Comunque, __metaclass__ = MetaBorg e vai;-).
>


a proposito..
Non ho mai capito bene dal cookbook quale fosse il problema del SP.
Solo relativo ad una certa ambiguità nel gestire l'ereditarietà?
(ovviamente borg è un nome troppo più fico e solo per que4sto merita di
essere scelto


>>Semplicemente, ometti la dichiarazione dei metodi astratti o definiscilo
>>come un 'raise NotImplemented'.

>
>
> No!!! raise NotImplementedError, invece. L'oggetto NotImplemented e`
> fatto per RESTITUIRLO (con dei return) da metodi che non sanno cosa fare
> coi loro argomenti, cosi` che Python provi se possibile qualcosa
> d'altro; NON e` una eccezione e c'entra poco con le classi astratte.
> NotImplementedError e` l'eccezione.


cavolo non sapevo neanche esistesse un oggetto NotImplemented, avevo
solo sbagliato a scrivere grazie per l'informazione
  #6  
Old 07-16-2008
Gianluca Sartori
Guest
 
Posts: n/a
Default Re: Thinking in Python

Grazie a tutti per le risposte! Continuo lo studio applicato... Per quanto
riguarda il 90% e le metaclassi: Il non sapere a cosa servono non
significa che non le si possa imparare ad usare. Il collega Tim Peters
sottovaluta l'importanza (e la forza) dell'"istruzione". Forse
il 10% degli utenti non le userà mai, ma conoscerne
l'esistenza/significato porterebbe aiutare in molti casi appunto a
decidere se è utile o meno utilizzarle.

Grazie a tutti!
Gianluca


Thread Tools
Display Modes

Forum Jump


All times are GMT. The time now is 07:13 PM.


Powered by vBulletin® Version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0