Python模拟数据类型

利用特殊方法,来使得自定义对象来实现一个二维向量(Vector)类

一个简单的二维向量类

from math import hypot


class Vector:
    def __init__(self, x=0, y=0):
        self.x = x  # 将输入的x,y分别赋值给类属性x,y
        self.y = y

    def __repr__(self):  # 特殊方法来定义得到一个对象的字符串表示形式
        return ‘Vector(%r,%r)‘ % (self.x, self.y)

    def __abs__(self):
        return hypot(self.x, self.y)  # hypot函数计算x,y的平方和开根号

    def __bool__(self):
        return bool(abs(self))  # 如果一个向量的模是0就返回False
        # return bool(self.x and self.y)更高效的__bool__特殊方法的写法
        # 省掉了从abs到__abs__到平方再到平方根的这些中间步骤

    def __add__(self, other):  # 用特殊方法__add__来定义向量与其他向量之间的加法
        x = self.x + other.x
        y = self.y + other.y
        return Vector(x, y)

    def __mul__(self, scalar):  # 用特殊方法__mul__来定义与标量之间的乘法
        return Vector(self.x * scalar, self.y * scalar)
v1 = Vector(2, 4)  # 实例化向量类Vector
print(v1)
v2 = Vector(2, 1)
print(v1 + v2)  # 向量之间的加法
print(abs(Vector(3, 4)))  # 计算向量的模
print(v1 * 3)  # 向量与标量之间的乘法
Vector(2,4)
Vector(4,5)
5.0
Vector(6,12)

Python模拟数据类型

上一篇:AcWing 1004. 品酒大会 (后缀数组,并查集)


下一篇:Shell再次体检-工具使用