View Full Version : [Python] metodi di utilità - questione stilistica
mad_hhatter
05-06-2008, 14:58
supponiamo di avere una classe in cui alcuni metodi fanno uso di un piccolo blocco di codice comune.
Tale pezzetto di codice è talmente insignificante che appare brutto inserirlo tra i metodi della classe stessa, ma è anche talmente legato alla classe che appare ancora più brutto definirlo al di fuori della classe.
sarebbe bello definirlo attraverso una lambda function interna alla classe, ma andrebbe comunque chiamato come self.lambda_function
non esiste un modo per definire un blocco di codice internamente a una classe in modo da poterlo richiamare SOLO ALL'INTERNO DELLA CLASSE usando soltanto il suo nome senza una reference alla classe o a una sua istanza?
grazie mille
cdimauro
05-06-2008, 22:28
Purtroppo no.
Python si affida allo scope per andare a recuperare le variabili o le funzioni a cui accedere, ma dentro una classe lo scope serve soltanto per dichiarare gli elementi che appartengono alla classe.
Per utilizzarli si deve sempre far riferimento a self, cls oppure specificare la classe stessa, perché in mancanza di ciò lo scope rimane quello del metodo (suppongo) all'interno del quale si vorrebbe far uso di questa funzione "anonima"; e i metodi in Python sono equivalenti alle funzioni, dunque sono disponibili soltanto le variabili in essa dichiarate (o in funzioni esterne).
supponiamo di avere una classe in cui alcuni metodi fanno uso di un piccolo blocco di codice comune.
Tale pezzetto di codice è talmente insignificante che appare brutto inserirlo tra i metodi della classe stessa, ma è anche talmente legato alla classe che appare ancora più brutto definirlo al di fuori della classe.
sarebbe bello definirlo attraverso una lambda function interna alla classe, ma andrebbe comunque chiamato come self.lambda_function
non esiste un modo per definire un blocco di codice internamente a una classe in modo da poterlo richiamare SOLO ALL'INTERNO DELLA CLASSE usando soltanto il suo nome senza una reference alla classe o a una sua istanza?
grazie mille
Come dice cdimauro non si puo'. All'interno di un metodo lo "stack dello scope" (non ricordo il nome corretto :p) contiene al livello piu' alto le variabili della chiamata corrente (fondamentalmente var. locali e parametri) e subito dopo lo scope in cui e' stato definita la classe. Per cui o metti il blocco di codice in un metodo, o lo metti nel blocco di codice che contiene la classe, non ci si scappa.
Se proprio quella funzione da fastidio che si veda, non esportarla dal modulo.
Se non ti basta puoi sempre "wrappare" tutto in una funzione che ritorni la classe, ma e' come tagliarsi una mano per un'unghia incarnita.
mad_hhatter
06-06-2008, 11:10
grazie a tutti.
alla fine ho fatto un metodino all'interno della classe: metterlo all'esterno nel modulo era ancora peggio :D
e poi per 2 (letteralmente) righe di codice non vale la pena farsi troppe pippe :)
grazie ancora
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.