向量类 - 模拟数值类型

0 投票
4 回答
695 浏览
提问于 2025-04-16 00:21

我有一个Python类

class Vector2D(object):

    def __init__(self, x, y):
        self.x = float(x)
        self.y = float(y)

    def mag(self):
        return sqrt(self.x**2 + self.y**2)

    ...

我想让它可以像这样相乘向量:vector1 * vector2,所以我添加了

    def __mul__(self, v):
        return Vector2D(self.x * v.x, self.y * v.y)

但我也想用 new_vector = some_vector * 2 这种方式来返回一个新的向量,像这样

    def __mul__(self, factor):
        return Vector2D(self.x * factor, self.y * factor)

我该怎么同时做到这两点呢?

4 个回答

0

我对Python不是特别精通,但我很确定你只需要写一个函数,然后检查第二个参数的类型。

顺便问一下,为什么你只是通过乘法来计算向量的分量?这样做似乎没什么用。

1

在Python中没有函数重载的概念,也就是说你不能像在其他编程语言中那样定义同名但参数不同的函数。你需要手动处理这些情况。

class Vector(object):
  def __init__(self, x, y):
    self.x = x
    self.y = y
  def __mul__(self, k):
    if type(k) == float or type(k) == int:
      return Vector(self.x * k, self.y * k)
    if type(k) == Vector:
      return Vector(self.x * k.x, self.y * k.y)
    raise "What the hell!?"
  def __str__(self):
    return "<%f, %f>" % (self.x, self.y)


print Vector(1, 2) * Vector(3, 4)
print Vector(1, 2) * 5
2

检查一下 v 是否是一个 Vector2D 类型。如果不是,就把它传给 float() 函数,然后进行适当的乘法运算。

撰写回答