python学习——magic method 魔法方法

代码


'''

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()


输出结果

11478104-edf218c2ca849441.png
image.png

猜你喜欢

转载自blog.csdn.net/weixin_34416754/article/details/87130586