0

そのため、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とは非常に異なるため、これを行う方法がわかりません。

4

1 に答える 1

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)
于 2013-10-07T07:14:21.313 に答える