3

クラスでcontainsメソッドを適切に設定する方法がわかりません。呼び出すときに「in」演算子が自動的に使用されることは知っていますが、正しく設定する方法を理解していないと思います。

anotherCircle が特定の円に含まれているかどうかを確認するために使用する必要があります (両方ともユーザーからの入力)。教授は、このために 2 種類の方法を実行するように指示しました。

私が問題なく、それが何をしているのかを多かれ少なかれ理解している最初のものは、次のとおりです。

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

ただし、同じことを行うはずの次のメソッドは、main 関数で呼び出すことができるように、 containsメソッドを使用しています。私が持っているのはこれだけです:

def __contains__(self, anotherCircle):
    if anotherCircle in self:
        return True 

これを実行しようとすると、複数のエラーが発生します。私は自分自身に何かが欠けていると思いますが、何がわかりませんか? このようなcontainsメソッドを書いているときに、正確に何をする必要があるのか​​ 誰かが私に説明してくれませんか?

4

2 に答える 2

9

__contains__オブジェクトのメソッドは;を呼び出しません。 inむしろ、それはinオペレーターが呼ぶものです。

あなたが書くとき

if circle1 in circle2:

Pythonインタープリターは、それがCircleオブジェクトであることを確認し、そのために定義されcircle2たメソッドを探します。__contains__それは本質的に呼び出しようとします

circle2.__contains__(circle1)

__contains__これは、を使用せずにメソッドを作成する必要があることを意味しますin。そうしないと、終了しない再帰メソッドを作成することになります。

于 2013-02-08T06:23:16.577 に答える
1

メソッドは、元の__contains__メソッドと同じロジックを使用する必要がありcontainsます。そうでなければ、ある円が別の円を含むことの意味を Python はどうやって知るのでしょうか? あなたはそれを言わなければなりません、それが__contains__メソッドの目的です。__contains__を呼び出すかcontains、代わりにコード全体をそのメソッドに入れることができます。

于 2013-02-08T06:34:56.047 に答える