我有一个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'
答案 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()