RE: [Python-es] Sobrecargar función
Hernán Martínez Foffani
hernan en orgmf.com.ar
Jue Feb 10 10:59:15 CET 2005
Al final del mensaje te incluyo la clase completa.
No debería ser necesario agregar el método __deepcopy__,
y en todo caso el que expongo es ineficiente, pero
debido al bug http://www.python.org/sf/1099746 puede
ser necesario. Hay un patch en http://www.python.org/sf/1100562
-H.
--- lc.py ---
import copy
class ListDict(dict):
def __init__(self, *args):
self._orden = []
dict.__init__(self, *args)
def __setitem__(self, n, v):
if not n in self._orden:
self._orden.append(n)
dict.__setitem__(self, n, v)
def __delitem__(self, k):
dict.__delitem__(self, k)
self._orden.remove(k)
def keys(self):
return self._orden
def values(self):
res = []
for item in self._orden:
if self.has_key(item):
res.append(self[item])
return res
def index(self, n):
try:
pos = self._orden.index(n)
except:
pos = -1
return pos
def count(self):
return len(self._orden)
def copy(self):
c = ListDict(self)
c._orden = self._orden[:]
return c
def __copy__(self):
return self.copy()
def __deepcopy__(self, *args):
c=ListDict(copy.deepcopy(dict(self), *args))
c._orden=self._orden[:]
return c
def test():
ld = ListDict()
ld["a"] = 1
ld2 = ld.copy()
assert ld2 == ld
assert not ld2 is ld
ld3 = copy.deepcopy(ld)
assert ld3 == ld
assert not ld3 is ld
Más información sobre la lista de distribución Python-es