Wie gehen Sie die __enthält__ - Methode in python?
Ich habe Schwierigkeiten zu verstehen, wie man richtig eine enthält Methode in meiner Klasse. Ich weiß, es verwendet automatisch den operator "in", wenn Sie es nennen, ich glaube einfach nicht, ich verstehe, wie es ordnungsgemäß eingestellt werden.
Muss ich verwenden, um zu sehen, wenn anotherCircle wird, die in einem bestimmten Kreis (beide von den Eingaben des Benutzers). Der prof hatte uns zwei verschiedene Arten von Methoden für diese.
Die erste, die ich habe keine Probleme mit mehr oder weniger verstehen, was es tut, ist Es wie folgt:
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
Aber die nächste Methode, die angeblich die gleiche Sache zu tun, verwendet die enthält Methode, so dass wir nennen es mit in in der main-Funktion. Alles, was ich habe, ist dies:
def __contains__(self, anotherCircle):
if anotherCircle in self:
return True
Bekomme ich mehrere Fehler, wenn ich versuche, diese laufen. Ich glaube, ich bin fehlt etwas, auf das selbst, aber ich bin mir nicht sicher, was? Könnte jemand bitte versuchen, mir zu erklären, was genau Sie tun müssen, wenn Sie schreiben eine enthält Methode wie diese?
if anotherCircle self
ist nicht, dass der Aufruf von enthält in sich selbst? Sollten Sie nicht tunreturn self.contains(anotherCircle)
in der Methode Körper?- Ich weiß es nicht. Ich denke, das ist, was ich gefragt wurde
- ja, Sie fordern
__contains__
rekursiv, wenn Sie "in" in__contains__
. - Ja, was Sie gesagt hat tatsächlich funktioniert! Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
__contains__
- Methode für ein Objekt nicht nennenin
; eher, es ist das, was diein
Betreiber Anrufe.Beim schreiben
Den python-interpreter wird sehen, dass
circle2
ist ein Kreis-Objekt, und wird sich für eine__contains__
Methode definiert. Es werden im wesentlichen zu nennen versuchenDies bedeutet, dass Sie brauchen, um schreiben Sie Ihre
__contains__
Methode ohnein
oder sonst schreiben Sie eine rekursive Methode, die nie endet.contains
Methode -- der code dort sieht genauso aus wie das, was man braucht-außer, dass Sie vielleicht wollen, gibt False zurück, wenn self nicht enthalten circle2dIhre
__contains__
Methode muss die gleiche Logik wie Ihre original -contains
Methode. Ansonsten wie Python wissen, was es bedeutet für einen Kreis zu enthalten, die einem anderen? Man muss es sagen, dass das, was die__contains__
Methode ist für. Sie können entweder__contains__
zu nennencontains
oder setzen Sie einfach den gesamten code in dieser Methode statt.