如何使用__repr__方法python 2.7

时间:2015-05-18 12:59:07

标签: python python-2.7 repr

我需要在2D中定义一类多边形。 每个多边形由元组列表(坐标)定义,例如:

poly = [(0.5,0),(1,0.5),(0.5,1),(0,0.5)]

(无需排序) 这些点从最左边的点开始顺时针排序。

我的任务是正确定义这个类  __init____repr__is_inside(self, q)函数用于检查多边形内点的天气。

__repr__方法可以打印'[(0.5,0),(1,0.5),(0.5,1),(0,0.5)]'

到目前为止,这就是我所拥有的:

class Polygon2D:
    def __init__(self, pts):
        for index in range(len(pts)):
            self.index = pts[index]
    def __repr__(self):

        return str(self)

当我尝试运行它时,程序崩溃了。请帮帮我!!

1 个答案:

答案 0 :(得分:4)

str(self)调用self.__str__,它将委托给self.__repr__,在您的实施中调用str(self),再次启动整个圈子。所以是的,你引起了无限的递归。

然而,更直接的问题是存储pts列表。您只存储最后一点,丢弃其余部分。在循环中分配给self.index只会导致最后一次分配获胜。

直接存储pts作为属性,只需将 转换为字符串作为__repr__的结果:

class Polygon2D:
    def __init__(self, pts):
        self.points = pts

    def __repr__(self):
        return str(self.points)

存储整个点列表也可以实现is_inside功能。