Detailed explanation of Python magic methods _getitem_, _setitem_, _delitem_, _len__

Keywords: Python Attribute

Python's magic method is usually named in the form of _methodname_, such as: __init__ (Construction method) _ getitem, setitem (subscriptable required method), delitem (del obj[key] required method, len (len(...) ) Required method, etc.

In Python, if we want to create classes similar to sequences and maps, we can simulate them by rewriting magic methods getitem, setitem, delitem, len.


The function of magic method:

_ getitem_ (self, key): Returns the value corresponding to the key.

_ setitem (self, key, value): Sets the value of a given key

_ Deltem_ (self, key): Delete the element corresponding to a given key.

_ len_(): Number of elements returned

# coding:utf-8
'''
    desc: Trying to define a new data type
          //Arithmetic progression
    author: pythontab.com
'''
class ArithemeticSequence(object):
    def __init__(self,start=0,step=1):
        print 'Call function __init__'
        self.start=start
        self.step=step
        self.myData={}
    # Define the method to get the value
    def __getitem__(self,key):
        print 'Call function __getitem__'
        try:
            return self.myData[key]
        except KeyError:
           return self.start+key*self.step
    # Definition of assignment method
    def __setitem__(self,key,value):
        print 'Call function __setitem__'
        self.myData[key]=value
    # Define the method of obtaining length
    def __len__(self):
        print 'Call function __len__'
        # In order to see the effect of _len_, we intentionally increase length by 1.
        return len(self.myData) + 1
    # Define methods to delete elements
    def __delitem__(self, key):
        print 'Call function __delitem__'
        del self.myData[key]
     
s=ArithemeticSequence(1,2)
print s[3]  # Here you should execute self.start+key*self.step, because there is no three keys
s[3] = 100  # Assignment
print s[3]  # The assignment is done before, then the direct output assignment value is 100
print len(s) # We deliberately added 1 more and should return 2
del s[3] # Delete 3 key
Output results:

Call function __init__
Call function __getitem__
7
Call function __setitem__
Call function __getitem__
100
Call function __len__
2
Call function __delitem__
Call function __getitem__
7
The principle of these magic methods is that when we subscribe to the attribute item of a class, it will be intercepted by getitem (), setitem (), delitem (), so as to perform the operations we set in the method, such as assignment, modification of content, deletion of content and so on.

Posted by georgee.b on Fri, 15 Feb 2019 00:03:18 -0800