python3 定义向量运算

from math import hypot

#定义向量的构造方法
class Vector:
    def __init__(self,x=0,y=0):
        self.x=x;
        self.y=y;
    '''
    __repr__是python的内置方法,他能将一个对象用字符串的形式表达出来
    %r用rper()方法处理对象  输出结果  'content'
    %s用str()方法处理对象   输出结果   content  不带引号
    如果你只想实现这两个特殊方法中的一个,__repr__ 是更好的选择,因为如果一个对象
    没有 __str__ 函数,而 Python 又需要调用它的时候,解释器会用 __repr__ 作为替代
    '''

    def __repr__(self):
        return 'Vector(%r,%r)' % (self.x,self.y)
    '''
    定义__abs__方法
    返回hypot函数的运算结果
    hypot() 返回欧几里德范数 sqrt(x*x + y*y)。
    '''
    def __abs__(self):
        return hypot(self.x,self.y)
    '''
    bool(abs(self)) 把模值变成了布尔值
    我们对 __bool__ 的实现很简单,如果一个向量的模是 0,
    那么就返回 False,其他情况则返回 True。
    
    如果想让 Vector.__bool__ 更高效,可以采用这种实现:
    def __bool__(self):
        return bool(self.x or self.y)
    '''
    def __bool__(self):
        return  bool(abs(self))
    '''
    __add__ 和 __mul__,这两个方法的返回值都是新创建的向量对象,
    other代表其他向量对象,
    其返回值都是靠运算符 + 或者 * 实现的运算结果
    
    '''
    def __add__(self, other):
        x=self.x+other.x
        y=self.y+other.y

        return Vector(x,y)

    def __mul__(self,scalar):
        return Vector(self.x*scalar,self.y*scalar)

    #创建两个向量实例  v1   v2
print('=============================输出两个向量加运算========================')
v1=Vector(2,4)
v2=Vector(2,1)
print(v1+v2)
print('=============================输出单个向量欧几里德运算========================')
# 求该向量的欧几里得范数
v=Vector(3,4)
print(abs(v))

print('=============================输出单个向量的标量乘法运算========================')
print(v*3)
print(abs(v*3)) #  (3*3)(3*3) +(4*3)(4*3) 的结果开方

猜你喜欢

转载自www.cnblogs.com/benjamin77/p/9109786.html