关于使用类的向量

时间:2016-03-05 19:45:25

标签: python class python-3.x

我的代码需要一些帮助! 这是一些指示:

  •   

    v。 mul (其他):如果其他属于Vector类型,则返回点> v和其他的乘积,是>的乘积之和。   相应的组件;如果其他组件是>,则引发断言错误。   不同的维度。如果other是int或float类型,则返回new   由v与其他的标量乘法产生的向量。如果>其他的类型不是Vector,int或float,引发了一个   断言>错误。

  • v。 rmul (其他):定义与v。 mul (其他)完全相同

=============================================== =========================

以下是代码:

>>> v1 = Vector([2, 3, 4]); v2 = Vector([1, 2, 3])
>>> print(v2 * 2); print(2 * v2)
Vector: [2, 4, 6]
Vector: [4, 8, 12]
>>> print(v1 * v2); print(v2 * v1)
128
1376

以下是代码中的一些输出:

>>> v1 = Vector([2, 3, 4]); v2 = Vector([1, 2, 3])
>>> print(v2 * 2); print(2 * v2)
Vector: [2, 4, 6]
Vector: [2, 4, 6]
>>> print(v1 * v2); print(v2 * v1)
20
20

但是,正确的输出是:

class Post < ActiveRecord::Base
  belongs_to :author
end

class Author < ActiveRecord::Base
  has_many :posts
  def name_with_initial
    "#{first_name.first}. #{last_name}"
  end
end

所以,我想知道问题是什么以及如何解决它。 谢谢!

1 个答案:

答案 0 :(得分:0)

此方法提供所需的输出:

def __mul__(self, other):
    if isinstance(other, self.__class__):
        if len(self.vec) != len(other.vec):
            raise AssertionError('Vectors have different lengths '
                                 'of {} and {}'.format(len(self.vec), len(other.vec)))
        return sum(x * y for x, y in zip(self.vec, other.vec))
    elif isinstance(other, (int, float)):
        return Vector([x * other for x in self.vec])
    else:
        raise AssertionError('Cannot use type ' + str(type(other)))