*Memos:
- My post explains __getitem__() and __setitem__().
- My post explains the custom list and tuple with __getitem__() and __setitem__().
- My post explains a set and copy.
- My post explains a dictionary, the dictionary with keying and copy.
- My post explains a string.
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'}
<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
<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
Top comments (0)