我很难理解如何在类中正确设置contains方法。我知道当你叫它的时候,它会自动使用“in”这个运算符,我只是不知道如何正确设置它。
我必须使用它来查看另一个圆是否包含在一个特定的圆中(这两个输入都来自用户)。教授让我们做了两种不同的方法。
第一个我没有问题,或多或少了解它在做什么,如下:
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方法,这样我们就可以用主函数中的调用它。我只有这个:
def __contains__(self, anotherCircle):
if anotherCircle in self:
return True
当我试图运行此程序时,会出现多个错误。我想我在自己身上少了点什么,但我不确定是什么?请有人解释一下,当您编写这样一个contains方法时,您到底需要做什么?
对象上的
__contains__
方法不会调用in
;而是in
运算符调用的内容。当你写作时
python解释器将看到
circle2
是一个圆对象,并将寻找为其定义的__contains__
方法。它基本上会尝试调用这意味着您需要在不使用
in
的情况下编写__contains__
方法,否则您将编写一个永不结束的递归方法。您的
__contains__
方法必须使用与原始contains
方法相同的逻辑。否则,Python如何知道一个圆包含另一个圆意味着什么?你必须告诉它,这就是__contains__
方法的用途。您可以让__contains__
调用contains
,或者将整个代码放在该方法中。相关问题 更多 >
编程相关推荐