如何通过调用在同一类-Vector中定义的方法来初始化Vector实例?

时间:2013-10-07 07:07:56

标签: python

所以我想初始化一个实例ov一个Vector类,并通过该类中定义的方法返回元组。

class Point(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

class Vector(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def subtract(self, a, b):
        x = a.x - b.x
        y = a.y - b.y
        return x, y # <-- This tuple


p = Point(0, -1)
i = Point(1, 1)
# Here I want to call Vector.subtract(p, i) and assign this tuple to a Vector instance

我遵循矢量教程,但它们是用C ++编写的,其语法与Python有很大不同,我不知道如何做到这一点。

1 个答案:

答案 0 :(得分:3)

为什么不重写你的方法

def subtract(self, a, b):
    x = a.x - b.x
    y = a.y - b.y
    return x, y # <-- This tuple

def subtract(self, a, b):
    x = a.x - b.x
    y = a.y - b.y
    return Vector(x, y) # <-- This tuple

声明实例方法substract也很奇怪,这样做更合理:

def subtract(self, b):
    x = self.x - b.x
    y = self.y - b.y
    return Vector(x, y) # <-- This tuple

所以你可以打电话给

a = Vector(1,2)
b = Vector(4,1)
c = a.substract(b)

或至少通过删除self引用

使其成为静态方法
@staticmethod
def subtract(a, b):
    x = a.x - b.x
    y = a.y - b.y
    return Vector(x, y)  # <-- result as new Vector

然后像这样使用它

c = Vector.subtract(a, b)