我需要为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
但仍然陷入如何从每个点获得轮廓的总长度......
答案 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