RE: [Python-es] Sobrecargar función
Hernán Martínez Foffani
hernan en orgmf.com.ar
Mie Feb 9 18:09:03 CET 2005
> Hola Hernán,
> *******************
> def copy(self):
> c = ldict(self) ------------- aqui has puesto dict o ldict
Como te decía en el otro mail deberías poner ListDict().
(Es que como progamador vago escribí menos.. je)
Pude reproducir el error. Se da en el caso que hagas:
>>> l = ListDict()
>>> import copy
>>> lll = copy.copy(l)
Lo solucionas especificando un metodo __copy__ que apunte al
nuevo copy.
La clase quedaría así:
>>> class ListDict(dict):
def __init__(self, *args):
self._orden=[]
dict.__init__(self, *args)
...
def copy(self):
c=ListDict(self)
c._orden = self._orden[:]
return c
def __copy__(self):
return self.copy()
>>> l = ListDict()
>>> import copy
>>> lll = copy.copy(l)
>>>
Ahora el problema lo tendrás con copy.deepcopy() ;-)
Ahí deberías decidir tú qué opción querrías hacer.
Por ejemplo:
...
def __deepcopy__(self):
c=ListDict(copy.deepcopy(self))
c._orden=self._orden[:]
return c
...
-H.
Más información sobre la lista de distribución Python-es