example of python operator overloadind

本文详细介绍了如何在Python中实现面向对象编程的概念,并通过一个简单的Vector类实例展示了类的属性、方法及运算符重载的基本用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 #

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值