In [20]:
class MyClass:
    
    def __len__(self):
        return 0
    
    def __getitem__(self, index):
        return index
    
In [21]:
l = MyClass()
In [22]:
len(l)
Out[22]:
0
In [24]:
l["XX"]
Out[24]:
'XX'
In [25]:
class MyClass:
    
    def __add__(self, x):
        return x
    
    def __sub__(self, y):
        return y
    
    def __mul__(self, y):
        return y*2
    
    
In [26]:
l = MyClass()
In [27]:
l + 23
Out[27]:
23
In [28]:
l - 24
Out[28]:
24
In [29]:
l * 9
Out[29]:
18
In [ ]:
class MyClass:
    
    def __iter__(self):
        self.current = 1
        self.end = 9
        
        return self
        
    
    def __next__(self):
        if ( self.current > self.end ):
            raise StopIteration
        
        next_value = self.current
        self.current += 2
    
        return next_value
In [ ]:
l = MyClass()
In [ ]:
for x in l:
    print(x)
In [30]:
class MyClass:
    
    def __init__(self, val):
        self.val = val
    
    def __eq__(self, other):
        equality = False
        if ( isinstance(other, MyClass) ):
            if ( self.val == other.val ):
                equality = True
        return equality
    
    def __ne__(self, other):
        return not self.__eq__(other)
    
    def __hash__(self):
        return self.val.__hash__()
    
    def __repr__(self):
        return self.val.__repr__()
    
    def __str__(self):
        return self.val.__str__()
In [31]:
l = MyClass(99)
r = MyClass(101)
m = MyClass(99)
In [32]:
l == r
Out[32]:
False
In [33]:
l == m
Out[33]:
True
In [34]:
l != r
Out[34]:
True
In [ ]:
new_set = set([l, r, m])
new_set
In [ ]: