如何设置方法以获得每个点的总长度

时间:2017-04-26 22:32:37

标签: python oop

我需要为Polygon类提供一个length()方法,它通过将每个点到下一个点的距离相加来返回多边形轮廓的总长度,包括从最后一个点到第一个点的距离。例如:3点多边形poly = Poly(p1,p2,p3),poly.length()应返回从p1到p2的距离加上从p2到p3的距离加上从p3到p1的距离。 我应该如何在oop中设置length()方法? 这是我的代码:

class Polygon:
def __init__(self, points=[]): # init with list of points
    print("creating an instance of class", self.__class__.__name__)
    self.point_list = points[:]  # list to store a sequence of points

def draw(self):
    turtle.penup()
    for p in self.point_list:
        p.draw()
        turtle.pendown()
    # go back to first point to close the polygon
    self.point_list[0].draw()

def num_points(self):
    return len(point_list)

由于

所以我已经定义了一个dist()方法,它返回到给定点的2D距离:

def dist(self, other):
    dis_x = (other.x - self.x)*(other.x - self.x) 
    dis_y = (other.y - self.y)*(other.y - self.y)
    dis_new = math.sqrt(dis_x + dis_y)
    return dis_new

但仍然陷入如何从每个点获得轮廓的总长度......

1 个答案:

答案 0 :(得分:0)

如果你纯粹在寻找类和方法的结构,那么你有几个选择。您可以使用length()Poly类的方法,或者您可以使用动态属性来运行下面的函数。

使用您的提案:

class Poly(object):
    def __init__(self, *args):
        for arg in args:
            # Do something with each side
            print(arg)

    def length(self):
        return get_length_of_perimeter()

然后你可以这样称呼:

poly = Poly(p1, p2, p3)
print(poly.length())

或者你可以使用@property装饰器来返回函数,就像它是属性一样:

class Poly(object):
    def __init__(self, *args):
        for arg in args:
            # Do something with each side
            print(arg)

    @property
    def length(self):
        return get_length_of_perimeter()

然后你会打电话给:

poly = Poly(p1, p2, p3)
print(poly.length)  # notice you're not calling length as if it was a method