2016-12-29 6 views
0

なぜこのコードは機能しませんか?クラス内のself.somethingの動作についての混乱

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 

しかしこれはありますか?

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 

if self.angle1 = angle1なぜ私は短いバージョンを使用できませんか?

+0

それはちょうどそれです: 'angle1'はスコープがコンストラクタである変数ですが、' self.angle1'は 'self'のプロパティです。彼らは同じことではありません。 – trincot

答えて

0

これを説明するには、次の点を考慮してください。関数Triangle.check_anglesに到達したら、その時点で何が定義されているかを検討してください。 selfオブジェクトがあり、angle1、angle2、angle3が定義されています(self.angle1self.angle2self.angle3が定義されています)。

しかし、angle1自体は、(それがself.__init__関数のように)関数に渡されないため、既知の変数ではありません。したがって、angle1を要求すると、定義されず、エラーが発生します。それは明確ですか?

関連する問題