我有一些问题需要了解这里发生的事情。
这是我的来源:
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
?
答案 0 :(得分:2)
您创建了Calc()
的实例,无论何时执行此操作,都会为该新实例调用Calc.__init__()
。
您的Calc.__init__()
方法同时调用self.GetGrade()
和self.GetLenGrade()
:
self.Grade = self.GetGrade()
self.LenGrade = self.GetLenGrade()
在创建实例之后,您只访问LenGrade
属性并不重要; __init__
中的上述两行不存储方法引用,它们存储方法调用的结果。 Calc(...).LenGrade
然后返回其中一个结果;另一个结果是也。
答案 1 :(得分:1)
在对象初始化代码中,您有以下内容:
self.Grade = self.GetGrade()
self.LenGrade = self.GetLenGrade()
这意味着"将数据成员Grade的值设置为通过调用方法GetGrade"获得的值。和LenGrade一样。
他们被召唤也不足为奇,如果他们不这样做会更令人惊讶。