Macht eine Point-Klasse in Python
Ich versuche, erstellen Sie eine Klasse in python mit dem Titel "Punkt." Ich bin versuchen, um einen Punkt in einem Koordinatensystem x und y und verfolgen Sie. Sowie der Abstand zwischen den Punkten. Ich habe die Verwendung von Funktionen und Methoden. Ich habe angefangen und hier ist mein code. Ich bin mir nur nicht sicher, wie es zu benutzen, wenn ich gehen, um das Programm auszuführen. Jede Hilfe wird geschätzt.
EDIT: Code Aktualisiert
import math
class Point(object):
'''Creates a point on a coordinate plane with values x and y.'''
COUNT = 0
def __init__(self, x, y):
'''Defines x and y variables'''
self.X = x
self.Y = y
def move(self, dx, dy):
'''Determines where x and y move'''
self.X = self.X + dx
self.Y = self.Y + dy
def __str__(self):
return "Point(%s,%s)"%(self.X, self.Y)
def getX(self):
return self.X
def getY(self):
return self.Y
def distance(self, other):
dx = self.X - other.X
dy = self.Y - other.Y
return math.sqrt(dx**2 + dy**2)
def testPoint(x=0,y=0):
'''Returns a point and distance'''
p1 = Point(3, 4)
print p1
p2 = Point(3,0)
print p2
return math.hypot(dx, dy)
print "distance = %s"%(testPoint())
Ich brauche noch Hilfe verstehen, wie man tatsächlich mit dem code. Das ist, warum ich erstellt die testPoint
Funktion. Als ich eigentlich gehen, um den code auszuführen im LEERLAUF, wie kann ich beweisen, dass alles funktioniert? Dank ein paar Jungs!!
Ich brauche auch code hinzufügen, der im Konstruktor Inkrementieren COUNT
um 1 jedes mal, wenn ein Point-Objekt erstellt wird. Ich muss auch hinzufügen, entsprechenden code, so dass Punkte, die verglichen werden können mit den Vergleichsoperatoren, während die "Punkte" sind, stützt sich der Vergleich auf Ihre Entfernung vom Ursprung.
- schreiben Sie nicht get-in python, es sei denn,/bis Sie haben, um Attribute in Eigenschaften-aus welchem Grund auch immer.
- ich würde x-und y-Funktionen und verwenden Sie diese als Eigenschaften, wie wohl es tut.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vergessen Sie nicht
math.hypot
Deklariert
distance
wie ein argumentp
; innerhalb der Methode, die Sie sich beziehen, um es alsother
. Ändernp
zuother
in der Erklärung, so dass Sie übereinstimmen.sqrt()
ist nicht vordefiniert; Sie brauchen, zu tunimport math
und bezeichnen es alsmath.sqrt()
.Sind Sie nicht etwas zu tun mit der
testPoint()
Funktion erklären; Sie können es aufrufen, indem Sie hinzufügen einer Zeile am Ende wie:print "distance = %s"%(testPoint())
An diesem Punkt, dein code funktioniert und berechnet einen Abstand von 4.0 zwischen Ihre Punkte.
Nun, einige Stil-Probleme:
In Python, Sie in der Regel nicht privatisieren member-Variablen, und Sie nicht die Mühe zu schreiben triviale Getter und setter, so können Sie entfernen Sie die
getX()
undgetY()
Methoden und einfach findenp.X
undp.Y
direkt gegebenPoint p
.Den
math
Modul verfügt über eine komfortable hypotenuse Funktion, also indistance()
Sie können ändern Sie die Rücklaufleitung zureturn math.hypot(dx,dy)
.Standardmäßig, einen Benutzer-definierten Objekt hat eine unattraktive string-Darstellung:
<__main__.Point object at 0x1004e4550>
Definieren Sie eine string-Konvertierung-Methode in Ihrer Klasse so:
Diese werden verwendet, wenn das Objekt gedruckt oder anderweitig benötigt werden, in einen string umgewandelt.
p1.move( 2, 7 )
bewegtp1
von der aktuellen position an (5, 11).p2.Y
0 ist. Definieren Sie den Vergleich der hier beschriebenen Operatoren: docs.python.org/reference/datamodel.html#object.__lt__ zu vergleichen, die Punkte, durch die Entfernung vom Ursprung (obwohl Sie wahrscheinlich erhalten Weg mit nur definieren__cmp__()
).In Ihrem Ausgangspunkt.Entfernung Methode, verweisen Sie auf andere.X und anderen.Y; Andere nicht existiert.
Sollten Sie entweder ändern Sie die Entfernung Signatur Entfernung(selbst, andere) oder ändern Sie den code, p.
Müssen Sie auch den import math.sqrt:
Hum, warum nicht mit komplexen anstelle einer Punkt-Klasse?
Es hat alle Eigenschaften, die Sie suchen und mehr (wie rotation).
Hier ist ein Beispiel zu "OOP" der Anlage mit einem pedantisch-notation:
https://gist.github.com/jul/9286835
Da fragte man über das ausführen des Programms, wenn Sie wollen, führen Sie es von der Befehlszeile, die erste Sache Sie tun sollten ist, nur hinzufügen:
Es sind wirklich gute Erklärungen, was das bedeutet (siehe: Was bedeutet, wenn __name__ == "__main__": tun?). Aber auf dem höchsten Niveau, dies ruft Ihre test-Funktion bei der Eingabe
python yourfilename.py
an der Eingabeaufforderung. Die Sie mit dem Debuggen beginnen können, indem Sie sehen, welche Fehler ausgelöst werden und was passiert, wenn Sie die änderungen, die in den anderen Antworten.Zu incement ZÄHLEN jedes mal, wenn Sie erstellen Sie einen Punkt, um Ihre
__init__
Sie würde hinzufügen:Point.COUNT += 1
. ZÄHLEN ist eine Klasse variable, die Point-Klasse. Ein kurzer Hinweis auf Stil, PEP 8 sagt, dass "die Konstanten werden in der Regel definiert, die auf eine Modul-Ebene und geschrieben in Großbuchstaben mit Unterstrichen trennen Worte." So würden Sie es nennen wollencount
da es ist eine veränderliche Klasse variable. Endlich unten auf dem testPoint Funktion fügen Sie eine Zeileprint Point.count
so können Sie sehen, wie viele Punkte Sie erstellt.