您的位置:首页 > 编程语言 > Python开发

example of python operator overloadind

2010-03-15 18:35 453 查看
And last here is the overload operators example:

# map() takes two (or more) arguments, a function and a list to apply the function to

# lambda can be put anywhere a function is expected

# map() calls lambada for every element in the self list

# since Vector has overloaded __getitem__ and __len__ definitions

# the Vector object can be considered a list

# the lambda function adds each other item to each item in the list

# note this only adds objects that can typicaly be added by python

# print statements added to show what is getting called

class Vector:

def __init__(self, data):

print "__init__"

self.data = data

def __call__(self, varA, varB):

print "__call__"

print "do something with ", varA, " and ", varB

# overload print

# repr returns a string containing a printable representation of an object

# otherwise printing a Vector object would look like:

#<__main__.Vector instance at 0x0000000017A9DF48>

def __repr__(self):

print "__repr__"

return repr(self.data)

# overload +

def __add__(self, other):

print "__add__"

return Vector(map(lambda x, y: x+y, self, other))

# overload -

def __sub__(self, other):

print "__sub__"

return Vector(map(lambda x, y: x-y, self, other))

# overload /

def __div__(self, other):

print "__div__"

return Vector(map(lambda x, y: x/y, self, other))

# overload *

def __mul__(self, other):

print "__mul__"

return Vector(map(lambda x, y: x*y, self, other))

# overload %

def __mod__(self, other):

print "__mod__"

return Vector(map(lambda x, y: x%y, self, other))

# overload []

def __getitem__(self, index):

print "__getitem__"

return self.data[index]

# overload set []

def __setitem__(self, key, item):

print "__setitem__"

self.data[key] = item

# return size to len()

def __len__(self):

print "__len__"

return len(self.data)

# Execute this in the Python script tab

vecA = Vector([1, 2, 3])

>>__init__

vecA( 1, 2 )

>>__call__

>>do something with  1  and  2

print vecA

>>__repr__

>>[1, 2, 3]

vecB = vecA + vecA

>>__add__

>>__len__

>>__len__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__init__

vecB = vecA - vecA

>>__sub__

>>__len__

>>__len__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__init__

vecB = vecA / vecA

>>__div__

>>__len__

>>__len__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__init__

vecB = vecA * vecA

>>__mul__

>>__len__

>>__len__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__init__

vecB = vecA % vecA

>>__mod__

>>__len__

>>__len__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__getitem__

>>__init__

print vecB[2]

>>__getitem__

>>0

vecB[2] = 10

>>__setitem__

len(vecB)

>>__len__

>># Result: 3 #
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: