有没有办法停止执行__init__方法?

时间:2019-01-18 19:52:50

标签: python class methods

我有一个Point班。它的__init__方法检查乌龟画布上是否有一个点。如果发现它已经存在,则需要防止进一步执行该初始化。

points = []
class Point():
    def __init__(self, pen, points=points):
        self.x = pen.xcor()
        self.y = pen.ycor()
        for point in points:
            if point == (self.x, self.y, pen):
            # here, I need to stop __init__ from executing
            return True# this raises an error, but does not stop
            #the function the way I want
        points.append((self.x, self.y, pen))
        self.pen = pen
        self.get()

point1 = Point(p)

这就是我得到的:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    point1 = Point(p)
TypeError: __init__() should return None, not 'bool'

2 个答案:

答案 0 :(得分:2)

错误消息指出,__init__()应该返回None,而不是'bool'。将return True更改为裸露的return(相当于return None)。

for point in points:
    if point == (self.x, self.y, pen):
        return

  

它的__init__方法检查乌龟画布上是否有一个点。如果发现它已经存在,则需要防止进一步执行该初始化。

也就是说,您遇到的困难表明存在设计缺陷。一个点不应检查外部点列表并拒绝构建;相反,创建点的代码应该进行检查。

我将循环从构造函数中移出,并让调用者进行检查。

答案 1 :(得分:0)

也许您可以使用类似的东西?

class Point():
    def __init__(self, pen, points=points):
        self.x = pen.xcor()
        self.y = pen.ycor()
        for point in points:
            if point == (self.x, self.y, pen):
                return
        points.append((self.x, self.y, pen))
        self.pen = pen
        self.get()