首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vector类-模拟数值类型

Vector类-模拟数值类型
EN

Stack Overflow用户
提问于 2010-06-24 08:40:39
回答 4查看 666关注 0票数 0

我有一个python类

代码语言:javascript
复制
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一样将向量相乘,所以我添加了

代码语言:javascript
复制
    def __mul__(self, v):
        return Vector2D(self.x * v.x, self.y * v.y)

但是我也想使用new_vector = some_vector * 2并返回一个新的向量,如下所示

代码语言:javascript
复制
    def __mul__(self, factor):
        return Vector2D(self.x * factor, self.y * factor)

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-24 08:44:16

检查v是否为Vector2D,如果不是,则将其传递给float()并适当地进行乘法。

票数 2
EN

Stack Overflow用户

发布于 2010-06-24 08:52:33

Python中没有函数重载,必须手动完成。

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2010-06-24 08:53:52

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

顺便问一下,为什么只将向量的分量相乘就可以将其相乘呢?这似乎是完全无用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3106534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档