DEV Community

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

Posted on

__getitem__ & __setitem__ in Python (3)

Buy Me a Coffee

*Memos:

You can create a custom set, dictionary and string with __getitem__() and __setitem__() as shown below:

<Custom subscriptable & assignable set with upper() & lower()>

class MySet: data = {'a', 'b', 'c', 'd', 'e'} def __getitem__(self, index): if isinstance(index, int): return list(self.data)[index] elif isinstance(index, slice): return set(list(self.data)[index]) def __setitem__(self, index, value): temp = list(self.data) temp[index] = value self.data = set(temp) def upper(self): self.data = {x.upper() for x in self.data} def lower(self): self.data = tuple(x.lower() for x in self.data) v = MySet() print(v) # <__main__.MySet object at 0x0000029B85E779B0>  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)) # e c a d b  print(v[1:3]) print(v.__getitem__(index=slice(1, 3))) # {'a', 'c'}  print(v[:]) print(v.__getitem__(index=slice(None))) # {'e', 'a', 'b', 'c', 'd'}  for x in v: print(x) # e # c # a # d # b  v.upper() print(v[:]) # {'A', 'D', 'E', 'C', 'B'}  v[0] = 'X' v[1:5] = {'Y', 'Z'} print(v[:]) # {'Y', 'Z', 'D'}  v.lower() print(v[:]) # {'z', 'd', 'y'} 
Enter fullscreen mode Exit fullscreen mode

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

class MyDict: data = {'fname': 'John', 'lname': 'Smith', 'age': 36, 'gender': 'Male'} def __getitem__(self, key): return self.data[key] def __setitem__(self, key, value): self.data[key] = value def upper(self): self.data = {x: y.upper() if isinstance(y, str) else y for x, y in self.data.items()} def lower(self): self.data = {x: y.lower() if isinstance(y, str) else y for x, y in self.data.items()} v = MyDict() print(v) # <__main__.MyDict object at 0x0000029B85E8BCB0>  print(v['fname'], v['lname'], v['age'], v['gender']) print(v.__getitem__(key='fname'), v.__getitem__(key='lname'), v.__getitem__(key='age'), v.__getitem__(key='gender')) # John Smith 36 Male  v.upper() print(v['fname'], v['lname'], v['age'], v['gender']) # JOHN SMITH 36 MALE  v['fname'] = 'Anna' v['gender'] = 'Female' print(v['fname'], v['lname'], v['age'], v['gender']) # Anna SMITH 36 Female  v.lower() print(v['fname'], v['lname'], v['age'], v['gender']) # anna smith 36 female 
Enter fullscreen mode Exit fullscreen mode

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

class MyStr: data = 'abcde' def __getitem__(self, index): return self.data[index] def __setitem__(self, index, value): temp = list(self.data) temp[index] = value self.data = ''.join(temp) def upper(self): self.data = self.data.upper() def lower(self): self.data = self.data.lower() v = MyStr() print(v) # <__main__.MyStr object at 0x0000029B84F879B0>  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))) # bc  print(v[:]) print(v.__getitem__(index=slice(None))) # abcde  for x in v: print(x) # a # b # c # d # e  v.upper() print(v[:]) # ABCDE  v[0] = 'X' v[1:5] ='YZ' print(v[:]) # XYZ  v.lower() print(v[:]) # xyz 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)