我正在尝试使用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类做到这一点?我不知道要为参数设置什么或者在函数体中放置什么以使其工作。感谢
答案 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
课程。