你可以在类和类的实例上调用方法吗?

时间:2015-09-22 04:06:22

标签: python object vector methods

我正在尝试制作一个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>)

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>