2016-12-29 6 views
0

Warum funktioniert dieser Code nicht?Verwirrung darüber, wie Self.Something in Klassen funktioniert

class Triangle(object): 
    def __init__(self, angle1, angle2, angle3): 
     self.angle1 = angle1 
     self.angle2 = angle2 
     self.angle3 = angle3 

    number_of_sides = 3 
    def check_angles(self): 
     sum_of_angles = angle1 + angle2 + angle3 # PLS LOOK AT THIS LINE 
     if sum_of_angles == 180: 
      return True 
     else: 
      return False 

aber das tut?

class Triangle(object): 
    def __init__(self, angle1, angle2, angle3): 
     self.angle1 = angle1 
     self.angle2 = angle2 
     self.angle3 = angle3 

    number_of_sides = 3 
    def check_angles(self): 
     sum_of_angles = self.angle1 + self.angle2 + self.angle3 # LOOK HERE AGAIN 
     if sum_of_angles == 180: 
      return True 
     else: 
      return False 

wenn self.angle1 = angle1, warum kann ich nicht einfach die kürzere Version verwenden?

+0

Genau so ist es: 'angle1' ist eine Variable, deren Geltungsbereich der Konstruktor ist, während' self.angle1' eine Eigenschaft von 'self' ist. Sie sind nicht dasselbe. – trincot

Antwort

0

Um dies zu erklären, betrachten Sie Folgendes. Wenn Sie die Funktion Triangle.check_angles aufrufen, überlegen Sie, was an diesem Punkt definiert ist. Sie haben Ihr self Objekt, das Winkel1, Winkel2 und Winkel3 definiert hat (d. H. Sie haben self.angle1, self.angle2 und self.angle3 definiert).

Allerdings ist angle1 selbst keine bekannte Variable, da sie nicht in die Funktion übernommen wird (wie in der self.__init__ Funktion). Also, wenn Sie nach angle1 fragen, ist es nicht definiert und löst einen Fehler aus. Ist das klar?

Verwandte Themen