代码
'''
magic method —— 算术运算符
__add(self, other)__
__sub(self, other)__
__truediv(self, other)__ 真除
__floordiv(self, other)__ 整除
__mul(self, other)__
....
'''
class MyVec:
def __init__(self, *args):
self._value = []
for i in args:
self._value.append(i)
def __len__(self):
return len(self._value)
def __getitem__(self, item):
return self._value[item]
def __setitem__(self, key, value):
self._value[key] = value
def __add__(self, other):
'''
实现了__add()__ magic method
:param other:
:return:
'''
assert len(self) == len(other)
res = MyVec(*[0 for i in range(len(other))])
for i in range(self.__len__()):
res[i] = self[i] + other[i]
return res
def __sub__(self, other):
'''
实现了__sub()__ magic method
:param other:
:return:
'''
assert len(self) == len(other)
res = MyVec(*[0 for i in range(len(other))])
for i in range(self.__len__()):
res[i] = self[i] - other[i]
return res
def __mul__(self, other):
'''
实现了__mul()__ magic method
:param other:
:return:
'''
assert len(self) == len(other)
res = 0
for i in range(self.__len__()):
res += self[i] * other[i]
return MyVec(res)
def __truediv__(self, other):
'''
实现了__truediv()__ magic method
:param other:
:return:
'''
assert len(self) == len(other)
res = MyVec(*[0 for i in range(len(other))])
for i in range(self.__len__()):
res[i] = self[i] / other[i]
return res
def __neg__(self):
'''
符号的行为
:return:
'''
result = []
for i in self._value:
result.append(-1 * i)
return MyVec(*result)
def __abs__(self):
'''
定义 取绝对值的行为
:return:
'''
result = []
for i in self._value:
result.append(abs(i))
return MyVec(*result)
def __repr__(self):
var = 'vec:{}x{}'.format(1, len(self._value))
var += ' ['
for i in self._value:
var += '{} '.format(i)
var += ']'
return var
def main():
var1 = MyVec(1, 2, 3, 4, 5)
var2 = MyVec(5, 4, 3, 2, 1)
print(var1)
print(var2)
print('var1 + var2: {}'.format(var1 + var2))
print('var1 - var2: {}'.format(var1 - var2))
print('var1 * var2: {}'.format(var1 * var2))
print('var1 / var2: {}'.format(var1 / var2))
print('-var1: {}'.format(-var1))
print('abs(-var1): {}'.format(abs(-var1)))
if __name__ == '__main__':
main()
输出结果