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