DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on

__getitem__ & __setitem__ in Python (2)

Buy Me a Coffee

*Memos:

You can create the custom list and tuple with __getitem__() and __setitem__() as shown below:

<Custom list with upper() & lower()>

class MyList:
    data = ['a', 'b', 'c', 'd', 'e']

    def __getitem__(self, index):
        return self.data[index]

    def __setitem__(self, index, value):
        self.data[index] = value

    def upper(self):
        self.data = [x.upper() for x in self.data]

    def lower(self):
        self.data = [x.lower() for x in self.data]

v = MyList()

print(v)
# <__main__.MyList object at 0x0000029B85E772F0>

print(v[0], v[1], v[2], v[3], v[4])
print(v.__getitem__(index=0), v.__getitem__(index=1),
      v.__getitem__(index=2), v.__getitem__(index=3),
      v.__getitem__(index=4))
# a b c d e

print(v[1:3])
print(v.__getitem__(index=slice(1, 3)))
# ['b', 'c']

print(v[:])
print(v.__getitem__(index=slice(None)))
# ['a', 'b', 'c', 'd', 'e']

for x in v:
    print(x)
# a
# b
# c
# d
# e

v.upper()

print(v[:])
# ['A', 'B', 'C', 'D', 'E']

v[0] = 'X'
v[1:5] = ['Y', 'Z']

print(v[:])
# ['X', 'Y', 'Z']

v.lower()

print(v[:])
# ['x', 'y', 'z']
Enter fullscreen mode Exit fullscreen mode

<Custom assignable tuple with upper() & lower()>

class MyTuple:
    data = ('a', 'b', 'c', 'd', 'e')

    def __getitem__(self, index):
        return self.data[index]

    def __setitem__(self, index, value):
        temp = list(self.data)
        temp[index] = value
        self.data = tuple(temp)

    def upper(self):
        self.data = tuple(x.upper() for x in self.data)

    def lower(self):
        self.data = tuple(x.lower() for x in self.data)

v = MyTuple()

print(v)
# <__main__.MyTuple object at 0x0000029B85B2F260>

print(v[0], v[1], v[2], v[3], v[4])
print(v.__getitem__(index=0), v.__getitem__(index=1),
      v.__getitem__(index=2), v.__getitem__(index=3),
      v.__getitem__(index=4))
# a b c d e

print(v[1:3])
print(v.__getitem__(index=slice(1, 3)))
# ('b', 'c')

print(v[:])
print(v.__getitem__(index=slice(None)))
# ('a', 'b', 'c', 'd', 'e')

for x in v:
    print(x)
# a
# b
# c
# d
# e

v.upper()

print(v[:])
# ('A', 'B', 'C', 'D', 'E')

v[0] = 'X'
v[1:5] = ('Y', 'Z')

print(v[:])
# ('X', 'Y', 'Z')

v.lower()

print(v[:])
# ('x', 'y', 'z')
Enter fullscreen mode Exit fullscreen mode

Top comments (0)