2016-09-16 8 views
-7

ここで何が起こるかを理解するためにいくつかの問題があります。なぜPythonは両方の関数を呼び出しますか?

これは私のソースです:

class Calc(): 

    def __init__(self,Ideal,Limit,Value,Debug=None): 

     self.Ideal = Ideal 
     self.Limit = Limit 
     self.Value = Value 
     self.Debug = Debug 
     self.Grade = self.GetGrade() 
     self.LenGrade = self.GetLenGrade() 

    def GetGrade(self): 
     if self.Debug: 
      print('calling GetGrade') 
     return Grade 

    def GetLenGrade(self): 
     if self.Debug: 
      print('calling GetLenGrade') 
     return Grade 

GradeMinLen += Calc(TargetLen, LimitMinLen, Length ,Debug=1).LenGrade 

でそれを呼び出すとき、私は、出力

calling GetGrade  
calling GetLenGrade 

はなぜPythonがGetGradeを呼び出しているいつものですか?

+4

あなたは '__init__'で両方の関数を呼び出しています。 –

答えて

2

Calc()のインスタンスを作成し、そのときはいつでも、その新しいインスタンスに対してCalc.__init__()が呼び出されます。

あなたCalc.__init__()方法はself.GetGrade()self.GetLenGrade()の両方を呼び出します。

self.Grade = self.GetGrade() 
self.LenGrade = self.GetLenGrade() 

後、あなたが唯一のLenGrade属性にアクセスするインスタンスを作成したことを、ここでは重要ではありません。 __init__の上記の2行にはメソッド参照が格納されていません。メソッド呼び出しのの結果はです。 Calc(...).LenGradeはその結果の1つを返します。もう1つの結果はでもです。あなたのオブジェクトの初期化コードで

1

、あなたは以下があります。

self.Grade = self.GetGrade() 
self.LenGrade = self.GetLenGrade() 

この意味とLenGradeに同じ「方法GetGradeを呼び出すことで得られた値にデータメンバのグレードの値を設定します」。

彼らが呼び出されたのは驚くべきことではありません。そうでなければ、もっと驚くべきことです。

関連する問題