class - python - 计算类的函数被执行的次数

  显示原文与译文双语对照的内容

如果在类 CLASS. 中执行某个特定函数,我想计算执行了多少次。在类 counting_function_execution 中,通过在类中执行全局变量并每次执行函数来增加它:


class CLASS:


 global counting_function_execution 


 counting_function_execution = 0



 def __init__(self,name):


 self.name = name



 def FUNCTION(self):


 print("Hi" + self.name)


 print("This function was already excecuted", counting_function_execution," number of times.")


 counting_function_execution += 1



但是,当我完成它的时候:


test = CLASS("Fred")


test.FUNCTION()


test.FUNCTION()



我知道了


---------------------------------------------------------------------------


UnboundLocalError Traceback (most recent call last)


<ipython-input-104-dc8f3ae96700> in <module>()


 1 test = CLASS("Fred")


----> 2 test.say_hi()



<ipython-input-100-d0166079c633> in say_hi(self)


 8 def say_hi(self):


 9 print("Hi" + self.name)


---> 10 print("This function was already excecuted", counting_function_execution," number of times.")


 11 counting_function_execution += 1


 12 



UnboundLocalError: local variable 'counting_function_execution' referenced before assignment



时间:

如果要对所有变量都进行计数,则需要从实例中引用类变量,例如:


class CLASS:


 # static class counting_function_execution 


 counting_function_execution = 0



 def __init__(self,name):


 self.name = name



 def FUNCTION(self):


 print("Hi" + self.name)


 print("This function was already excecuted", self.counting_function_execution," number of times.")


 self.__class__.counting_function_execution += 1



c = CLASS("mark")


c.FUNCTION() # 0


c.FUNCTION() # 1



d = CLASS("john")


d.FUNCTION() # 2


d.FUNCTION() # 3



print(CLASS.counting_function_execution) #4



打印 0 - 3,最后 CLASS.counting_function_execution 将等于 4.

如果你改用 self.counting_function_execution += 1 每个实例都会得到它自己的计数,而 CLASS.counting_function_execution 最终将为零,因为实际上它不会。

无论哪种方法,都可以避免 global 变量。

...