我正在尝试制作一个Vector类,它使用三个参数(x,y,z)来制作矢量对象
u=Vector(3,-6,2) #Creates a vector you with components <3,-6,2>
你可以用矢量做的一件事是添加它们。我正在寻找一种方法来做这样的事情:
u=Vector(3,-6,2)
v=Vector(4,5,-1)
c=Vector.add(u,v) #returns a third vector, the sum of u and v (c = <7,-1,1>)
u.add(v) #modifies u to be the sum of u and v (u = <7,-1,1>)
答案 0 :(得分:2)
您不能使用相同的名称定义类和实例方法。
但是,我不会创建实例方法.add()
,而是覆盖通过__add__
符号添加两个实例时调用的+
魔术函数。当Python尝试评估x + y
时,它会尝试调用x.__add__(y)
:
class Vector(object):
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def __repr__(self):
return '<Vector: {}, {}, {}>'.format(self.x, self.y, self.z)
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y, self.z + other.z)
@classmethod
def add(cls, v1, v2):
return cls(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z)
-
>>> u = Vector(1, 2, 3)
>>> v = Vector(4, 5, 6)
>>> c = u + v
>>> print c
<Vector: 5, 7, 9>
>>> c = Vector.add(u, v)
>>> print c
<Vector: 5, 7, 9>