BPO-27639: Correct return type for UserList slicing operation (#13203)

Added logic to __getitem__ magic method for UserList to ensure that the return
type matches that of self.
This commit is contained in:
Michael Blahay 2019-05-26 10:28:09 -04:00 committed by Mark Shannon
parent 1b85f4ec45
commit f3d909428c
3 changed files with 13 additions and 1 deletions

View File

@ -1091,7 +1091,11 @@ class UserList(_collections_abc.MutableSequence):
return other.data if isinstance(other, UserList) else other
def __contains__(self, item): return item in 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 __delitem__(self, i): del self.data[i]
def __add__(self, other):

View File

@ -17,6 +17,12 @@ class UserListTest(list_tests.CommonTest):
for j in range(-3, 6):
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):
u = UserList("spam")
u2 = u + "eggs"

View File

@ -0,0 +1,2 @@
Correct return type for UserList slicing operations. Patch by Michael Blahay,
Erick Cervantes, and vaultah