[Python] diversi __init__ ??

Lawrence Oluyede l.oluyede a gmail.com
Mar 29 Gen 2008 21:14:22 CET


> Mi pare che sia normalissimo fare overloading come questo
>
> class A(object):
>       def __init__(self):
>           pass
>
> class B(A):
>       def __init__(self):
>           print 'OK'

Questo non è tecnicamente overloading, ma overriding. L'overloading
che si insegna nel mondo "statico" è la presenza di più metodi con
nome diverso ma "firme" diverse. Questo non è possibile in Python, per
questo ci sono i named parameters.
L'overriding invece l'hiding di un metodo di una superclasse da parte
di una sottoclasse (in alcuni linguaggi va esplicitato con il virtual,
in Python no).

BTW l'esempio che hai fatto non convince nemmeno me, per 2 motivi:

1 - l'eventuale codice di A.__init__() inizializzando B non viene chiamato

In [1]: class A(object):
   ...:     def __init__(self):
   ...:         print self.__class__
   ...:
   ...:

In [2]: class B(A):
   ...:     def __init__(self):
   ...:         print self.__class__
   ...:

In [3]: B()
<class '__main__.B'>
Out[3]: <__main__.B object at 0xe5e2d0>

2 - nel caso di gerarchie con ereditarietà multipla si perde l'ereditarietà



-- 
Lawrence, stacktrace.it - oluyede.org - neropercaso.it
"It is difficult to get a man to understand
something when his salary depends on not
understanding it" - Upton Sinclair


More information about the Python mailing list