1 """A more or less complete user-defined wrapper around list objects."""
5 class UserList(collections
.MutableSequence
):
6 def __init__(self
, initlist
=None):
8 if initlist
is not None:
9 # XXX should this accept an arbitrary sequence?
10 if type(initlist
) == type(self
.data
):
11 self
.data
[:] = initlist
12 elif isinstance(initlist
, UserList
):
13 self
.data
[:] = initlist
.data
[:]
15 self
.data
= list(initlist
)
16 def __repr__(self
): return repr(self
.data
)
17 def __lt__(self
, other
): return self
.data
< self
.__cast
(other
)
18 def __le__(self
, other
): return self
.data
<= self
.__cast
(other
)
19 def __eq__(self
, other
): return self
.data
== self
.__cast
(other
)
20 def __ne__(self
, other
): return self
.data
!= self
.__cast
(other
)
21 def __gt__(self
, other
): return self
.data
> self
.__cast
(other
)
22 def __ge__(self
, other
): return self
.data
>= self
.__cast
(other
)
23 def __cast(self
, other
):
24 if isinstance(other
, UserList
): return other
.data
26 def __cmp__(self
, other
):
27 return cmp(self
.data
, self
.__cast
(other
))
28 __hash__
= None # Mutable sequence, so not hashable
29 def __contains__(self
, item
): return item
in self
.data
30 def __len__(self
): return len(self
.data
)
31 def __getitem__(self
, i
): return self
.data
[i
]
32 def __setitem__(self
, i
, item
): self
.data
[i
] = item
33 def __delitem__(self
, i
): del self
.data
[i
]
34 def __getslice__(self
, i
, j
):
35 i
= max(i
, 0); j
= max(j
, 0)
36 return self
.__class
__(self
.data
[i
:j
])
37 def __setslice__(self
, i
, j
, other
):
38 i
= max(i
, 0); j
= max(j
, 0)
39 if isinstance(other
, UserList
):
40 self
.data
[i
:j
] = other
.data
41 elif isinstance(other
, type(self
.data
)):
42 self
.data
[i
:j
] = other
44 self
.data
[i
:j
] = list(other
)
45 def __delslice__(self
, i
, j
):
46 i
= max(i
, 0); j
= max(j
, 0)
48 def __add__(self
, other
):
49 if isinstance(other
, UserList
):
50 return self
.__class
__(self
.data
+ other
.data
)
51 elif isinstance(other
, type(self
.data
)):
52 return self
.__class
__(self
.data
+ other
)
54 return self
.__class
__(self
.data
+ list(other
))
55 def __radd__(self
, other
):
56 if isinstance(other
, UserList
):
57 return self
.__class
__(other
.data
+ self
.data
)
58 elif isinstance(other
, type(self
.data
)):
59 return self
.__class
__(other
+ self
.data
)
61 return self
.__class
__(list(other
) + self
.data
)
62 def __iadd__(self
, other
):
63 if isinstance(other
, UserList
):
64 self
.data
+= other
.data
65 elif isinstance(other
, type(self
.data
)):
68 self
.data
+= list(other
)
71 return self
.__class
__(self
.data
*n
)
73 def __imul__(self
, n
):
76 def append(self
, item
): self
.data
.append(item
)
77 def insert(self
, i
, item
): self
.data
.insert(i
, item
)
78 def pop(self
, i
=-1): return self
.data
.pop(i
)
79 def remove(self
, item
): self
.data
.remove(item
)
80 def count(self
, item
): return self
.data
.count(item
)
81 def index(self
, item
, *args
): return self
.data
.index(item
, *args
)
82 def reverse(self
): self
.data
.reverse()
83 def sort(self
, *args
, **kwds
): self
.data
.sort(*args
, **kwds
)
84 def extend(self
, other
):
85 if isinstance(other
, UserList
):
86 self
.data
.extend(other
.data
)
88 self
.data
.extend(other
)