如何在python中设置包含方法?

2024-04-26 17:48:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难理解如何在类中正确设置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方法时,您到底需要做什么?


Tags: 方法inselftruereturnifdistdef
2条回答

对象上的__contains__方法不会调用in;而是in运算符调用的内容。

当你写作时

if circle1 in circle2:

python解释器将看到circle2是一个圆对象,并将寻找为其定义的__contains__方法。它基本上会尝试调用

circle2.__contains__(circle1)

这意味着您需要在不使用in的情况下编写__contains__方法,否则您将编写一个永不结束的递归方法。

您的__contains__方法必须使用与原始contains方法相同的逻辑。否则,Python如何知道一个圆包含另一个圆意味着什么?你必须告诉它,这就是__contains__方法的用途。您可以让__contains__调用contains,或者将整个代码放在该方法中。

相关问题 更多 >