2017-03-10 4 views
1

Hier ist die minimale Point Klasse für diese Frage erforderlich.Übergeben der Klasse als Standardargument für ihre Methode

class Point: 
     def __init__(self, x = 0, y = 0): 
      self.x = x 
      self.y = y 
     def dist_from(self, point = Point(0, 0)): 
      return ((self.x-point.x)**2 + (self.y-point.y)**2)**0.5 

Ich mag die dist_from Methode die Entfernung vom Ursprung zurück, wenn kein Punkt übergeben wird. Da das Überladen von Methoden nicht möglich ist, habe ich beschlossen, ein Point-Objekt (den Ursprung) als Standardwert zu übergeben.

Aber mir fehlt etwas sehr fundamentales.

Traceback (most recent call last): 
    File "C:\Users\Naveen\Desktop\temp.py", line 26, in <module> 
    class Point: 
    File "C:\Users\Naveen\Desktop\temp.py", line 32, in Point 
    def dist_from(self, point = Point(0, 0)): 
NameError: name 'Point' is not defined 

Antwort

3

Standardwerte sind Ausdrücke, die erhalten ausgewertet wenn das Funktionsobjekt kompiliert wird. Die Suche nach Point wird fehlschlagen, da die Klasse Point zu diesem Zeitpunkt nicht erstellt wurde.

Diese Seite, indem ein Standardwert von None für den Standard und wirken auf diese Tatsache innerhalb der Methode Körper (wo der Name Point definiert wurde verstärkt sein kann:

def dist_from(self, point = None): 
     if point is None: 
      point = type(self)(0, 0) # Could do Point(0, 0) 
     return (self.x*point.x + self.y*point.y)**0.5 

ich type(self) hier bin mit statt Point, um den Klassennamen dort nicht fest zu codieren.

Verwandte Themen