bpo-27639: Correct return type for UserList slicing operation (#13169)
* BPO-27639: Correct return type for UserList slicing operation Added logic to __getitem__ magic method for UserList to ensure that the return type matches that of self.
This commit is contained in:
parent
ca87eebb22
commit
b1c3167c23
|
@ -1085,7 +1085,11 @@ class UserList(_collections_abc.MutableSequence):
|
||||||
return other.data if isinstance(other, UserList) else other
|
return other.data if isinstance(other, UserList) else other
|
||||||
def __contains__(self, item): return item in self.data
|
def __contains__(self, item): return item in self.data
|
||||||
def __len__(self): return len(self.data)
|
def __len__(self): return len(self.data)
|
||||||
def __getitem__(self, i): return self.data[i]
|
def __getitem__(self, i):
|
||||||
|
if isinstance(i, slice):
|
||||||
|
return self.__class__(self.data[i])
|
||||||
|
else:
|
||||||
|
return self.data[i]
|
||||||
def __setitem__(self, i, item): self.data[i] = item
|
def __setitem__(self, i, item): self.data[i] = item
|
||||||
def __delitem__(self, i): del self.data[i]
|
def __delitem__(self, i): del self.data[i]
|
||||||
def __add__(self, other):
|
def __add__(self, other):
|
||||||
|
|
|
@ -17,6 +17,12 @@ class UserListTest(list_tests.CommonTest):
|
||||||
for j in range(-3, 6):
|
for j in range(-3, 6):
|
||||||
self.assertEqual(u[i:j], l[i:j])
|
self.assertEqual(u[i:j], l[i:j])
|
||||||
|
|
||||||
|
def test_slice_type(self):
|
||||||
|
l = [0, 1, 2, 3, 4]
|
||||||
|
u = UserList(l)
|
||||||
|
self.assertIsInstance(u[:], u.__class__)
|
||||||
|
self.assertEqual(u[:],u)
|
||||||
|
|
||||||
def test_add_specials(self):
|
def test_add_specials(self):
|
||||||
u = UserList("spam")
|
u = UserList("spam")
|
||||||
u2 = u + "eggs"
|
u2 = u + "eggs"
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Correct return type for UserList slicing operations. Patch by Michael Blahay,
|
||||||
|
Erick Cervantes, and vaultah
|
Loading…
Reference in New Issue