| 
     
 
 
 
class MyList: 
    def __init__(self, start): 
        #self.wrapped = start[:]                 
        self.wrapped = []                        
        for x in start: self.wrapped.append(x) 
    def __add__(self, other): 
        return MyList(self.wrapped + other) 
    def __mul__(self, time): 
        return MyList(self.wrapped * time) 
    def __getitem__(self, offset): 
        return self.wrapped[offset] 
    def __len__(self): 
        return len(self.wrapped) 
    def __getslice__(self, low, high): 
        return MyList(self.wrapped[low:high]) 
    def append(self, node): 
        self.wrapped.append(node) 
    def __getattr__(self, name):                 
        return getattr(self.wrapped, name) 
    def __repr__(self): 
        return 'self.wrapped' 
 
class MyListSub(MyList): 
    calls = 0                                   
 
    def __init__(self, start): 
        self.adds = 0                           
        MyList.__init__(self, start) 
 
    def __add__(self, other): 
        MyListSub.calls = MyListSub.calls + 1   
        self.adds = self.adds + 1               
        return MyList.__add__(self, other) 
 
    def stats(self): 
        return self.calls, self.adds            
 
if __name__ == '__main__': 
    x = MyListSub('A') 
    y = MyListSub('B') 
    print x[0] 
    print x[1:] 
    print x + ['C'] 
    print x + ['D'] 
    print y + ['E'] 
    print x.stats() 
     
     
 
            
        
    
    |