*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)