[Python] diversi __init__ ??

Enrico Franchi enrico.franchi a gmail.com
Mar 29 Gen 2008 19:33:21 CET


On Jan 29, 2008, at 5:52 PM, Java wrote:

> Non è necessario, avevo giusto un paio di liste da inizializzare, ma
> alcune volte mi servivano vuote.
> Posso fare tutto con un __init__ che crea tutto ciò che mi serva
> lasciandolo "vuoto" e poi riempio tutto con metodi "set"

1. se devi settare una variabile non creare un metodo per settare la  
variabile; setta la variabile. [0]
2. si, puoi fare un metodo init che non faccia nulla e fare fare il  
resto fuori, ma non necessariamente è la strada migliore.
3. puoi fare n-mila metodi factory (ma non necessariamente è la strada  
migliore)

def __init__(self, foo=None, bar=None, ...):
   if foo:
     self.foo = foo
   else:
     self.foo = some_default_value
   ...


a = MyObj(foo='spam')
b = MyObj(foo='eggs')
c = MyObj(foo='spam', bar='eggs')
d = MyObj()
e = MyObj('spam')
f = MyObj('spam', 'eggs')

-----
[0] codice come questo è considerato altamente inutile e sgradevole

def setFoo(self, value):
   self.value = value

> Ma quindi se A eredita da B, non può fare l'overloading dei metodi  
> di B?

Il concetto di 'overloading' non ha senso in python. L'overload è un  
obiettivo o un mezzo?
L'overload è un *mezzo*. Quale è il problema che risolve? Quello di  
avere più metodi con lo stesso nome che accettano parametri diversi  
per numero e per tipo.

Come risolve lo stesso problema Python? Il tipo è ininfluente, fare  
funzioni che accettano un numero variabile di argomenti è banale,  
comodo da gestire e piuttosto gradevole da leggere (again, named  
parameters).

>


More information about the Python mailing list