我正在尝试在Python 2.7中创建表示LineString的代码,然后将LineString移动定义的x,y值(在这种情况下为(-1,-1))。 我正在使用两个类。
第一个是Point类,代表每行的单个x,y,第二个是LineString类,在这里我首先使用Point类将x,y个线点(p)的元组转换为列表。
我坚持使用的方法是如何将类Point中的move函数应用于LineString move。
换句话说,通过在LineString类中内部使用Point,我应该能够使用Point类中实现的move()而不是在Line String类中再次实现它。
我参加了类似的论坛,但找不到我的问题的答案。因此,我将感谢您的任何建议。
from itertools import starmap
class Point(object):
def __init__(self, x, y):
self.x = x
self.y = y
def move(self, move_x, move_y):
self.x = self.x + move_x
self.y += move_y
class LineString(object):
def __init__(self, *args):
print 'These are the arguments as tuple of tuples:', args
self.points = [Point(*p) for p in args]
def move(self, move_x, move_y):
for p in self.points:
p.move() # This is the part I don't know how to implement
# the move method for each point p
def __getitem__(self, index):
return self.points[index]
if __name__ == '__main__':
lin1 = LineString((1, 1), (0, 2))
lin1.move(-1, -1) # Move by -1 and -1 for x and y respectively
assert lin1[0].y == 0 # Inspect the y value of the start point.
lin2 = LineString((1, 1), (1, 2), (2, 2))
lin2.move(-1, -1) # Move by -1 and -1 for x and y respectively
assert lin2[-1].x == 1 # Inspect the x value of the end point.
print 'Success! Line tests passed!'
答案 0 :(得分:2)
您对此太想了。无论您传递给LineString.move
的任何参数也必须传递给Point.move
。
def move(self, move_x, move_y):
for p in self.points:
p.move(move_x, move_y)