使用类在Python中添加两组坐标?

时间:2013-10-24 03:14:45

标签: python function class

我正在尝试使用python中的类添加两组坐标。这是我到目前为止所做的。

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

def add(self, x):
    self.x = self + x

在另一个程序中运行我有的课程

A = Position(1, 1)
B = Position(2, 3)
A.add(B)
A.print()

所以我试图添加A和B来获得(3,4)。我如何使用add类做到这一点?我不知道要为参数设置什么或者在函数体中放置什么以使其工作。感谢

4 个答案:

答案 0 :(得分:8)

将添加转换为

def add(self, other):
    self.x = self.x + other.x
    self.y = self.y + other.y

也就是说,使用不可变对象通常很有用,所以为什么不添加返回一个新位置

def add(self, other):
    return Position(self.x + other.x, self.y + other.y)

然后,如果你真的想要变得时髦,为什么不覆盖__add__()

def __add__(self, other):
    return Position(self.x + other.x, self.y + other.y)

这将允许您使用“+”运算符一起添加两个点。

a = Position(1, 1) 
b = Position(2, 3) 
c = a + b

答案 1 :(得分:0)

好吧,我不完全确定你真的想改变自己的观点。如果你想改变你的观点,我会做

class Position:
    def __init__(self,x,y):
        self.x = x
        self.y = y
    def add(self,other):
        self.x += other.x
        self.y += other.y

或者,更常见的是(对于职位,我会说,你想获得一个新职位)

class Position:
    def __init__(self,x,y):
        self.x = x
        self.y = y
    def __add__(self,other):
        return Position(self.x + other.x, self.y + other.y)

这样,如果你覆盖__eq__

Position(1,2) + Position(3,4) == Position(4,6)

答案 2 :(得分:0)

你想要这样的东西:

class Position(object):

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
       "Add two Positions and return a new one."
       return Position(self.x + other.x, self.y + other.y)   

    __radd__ = __add__

    def __iadd__(self, other):
       "In-place add += updates the current instance."
       self.x += other.x
       self.y += other.y
       return self

    def __str__(self):
       "Define the textual representation of a Position"
       return "Position(x=%d, y=%d)" % (self.x, self.y)

   __repr__ = __str__

现在可以使用常规Python Position运算符添加+类,并使用常规print语句进行打印:

A = Position(1, 2)
B = Position(2, 3)
A += B
print(A)

答案 3 :(得分:0)

您可能只想import numpy并使用numpy.array而不是滚动自己的Position课程。