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