我无法理解如何在班级中正确设置包含方法。我知道当你调用它时它会自动使用“in”运算符,我只是觉得我不明白如何正确设置它。
我必须使用它来查看anotherCircle是否包含在特定的圆圈内(来自用户的输入)。教授让我们为此做了两种不同的方法。
第一个我没有遇到任何问题,或多或少地了解它在做什么,具体如下:
def contains(self, circle2d):
dist = math.sqrt((circle2d._x - self._x)**2 + (circle2d._y - self._y)**2) #Distance of second circle's coords from the first circle's coords
if dist + circle2d._radius <= self._radius:
return True
但是,下一个应该做同样事情的方法使用 contains 方法,以便我们可以在main函数中使用 in 来调用它。我只有这个:
def __contains__(self, anotherCircle):
if anotherCircle in self:
return True
我尝试运行此错误时遇到多个错误。我想我错过了自己的一些东西,但我不确定是什么?有人可以试着向我解释当你写一个包含方法时你需要做什么?
答案 0 :(得分:9)
对象上的__contains__
方法不会调用 in
;相反,它是in
运算符调用的内容。
写作时
if circle1 in circle2:
python解释器将看到circle2
是一个Circle对象,并将查找为其定义的__contains__
方法。它基本上会尝试调用
circle2.__contains__(circle1)
这意味着您需要在不使用__contains__
的情况下编写in
方法,否则您将编写永不结束的递归方法。
答案 1 :(得分:1)
您的__contains__
方法必须使用与原始contains
方法相同的逻辑。否则,Python将如何知道一个圆圈包含另一个圆圈意味着什么?你必须告诉它,这就是__contains__
方法的用途。您可以__contains__
致电contains
,或者只是将整个代码放入该方法中。