矢量类 - 模拟数字类型

时间:2010-06-24 00:40:39

标签: python

我有一个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 :(得分:2)

检查v是否为Vector2D,如果没有将其传递给float()并正确相乘。

答案 1 :(得分: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 :(得分:0)

我对Python并不陌生,但我很确定你只需编写一个函数并检查第二个参数的类型。

顺便说一句,为什么你只是乘以它们的组件来乘以向量?这似乎完全没用。

答案 3 :(得分:0)

请考虑您可能希望将numpy用于此类数据。