将类方法应用于Python 2.7中另一个类中的对象

时间:2018-11-02 13:52:58

标签: python

我正在尝试在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!'

1 个答案:

答案 0 :(得分:2)

您对此太想了。无论您传递给LineString.move的任何参数也必须传递给Point.move

def move(self, move_x, move_y):
    for p in self.points:
        p.move(move_x, move_y)