[Tutor] Operator Overloading

Kevin Reeder reederk at comcast.net
Mon Apr 4 17:13:23 CEST 2005


On Mon, 04 Apr 2005 21:14:21 +1200
John Fouhy <jfouhy at paradise.net.nz> wrote:

> Are you sure you've giving us all the code?

No, I was trying to keep it simple. Anyway, here it is,

class MyList:
    def __init__(self, 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 __setitem__(self, index, value):
        self.wrapped[index] = value
        print self.wrapped

    def __getattr__(self, name):
        return getattr(self.wrapped, name)

    def __repr__(self):
        return `self.wrapped`
  

=====

from mylist import MyList

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 __mul__(self, time):
        MyListSub.calls = MyListSub.calls + 1
        self.adds = self.adds + 1
        return MyList.__mul__(self, time)

    def __getitem__(self, offset):
        MyListSub.calls = MyListSub.calls + 1
        self.adds = self.adds + 1        
        return MyList.__getitem__(self, offset)

    def __len__(self):
        MyListSub.calls = MyListSub.calls + 1
        self.adds = self.adds + 1        
        return MyList.__len__(self)

    def __getslice__(self, low, high):
        MyListSub.calls = MyListSub.calls + 1
        self.adds = self.adds + 1  
        return MyList.__getslice__(self, low, high)

    def __setitem__(self, index, value):
        MyListSub.calls = MyListSub.calls + 1
        self.adds = self.adds + 1
        return MyList.__setitem__(self, index, value)
  
    def __getattr__(self, name):
        MyListSub.calls = MyListSub.calls + 1
        self.adds = self.adds + 1        
        return MyList.__getattr__(self, name)

     def __sub__(self, index):
        MyListSub.calls = MyListSub.calls + 1
        self.adds = self.adds + 1        
        return MyList.__sub__(self, index)

    def __and__(self, value):
        MyListSub.calls = MyListSub.calls + 1
        self.adds = self.adds + 1        
        MyList.__and__(self, value)

    def stats(self):
        return self.calls, self.adds


  


More information about the Tutor mailing list