Python3删除/重置d创建的变量

2024-06-01 03:13:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python3.5,我试图删除/重置由装饰器创建的变量。当我试图重置/删除calls时,我遇到了错误。我不知道我做错了什么。也许我调用的不是函数变量的正确实例?老实说,由于pdb的输出,我不知道变量调用的位置。在

import inspect

def logWrapper(func):
  def wrapper_func(self, *args, **kwargs):
    wrapper_func.calls += 1
    print('Func: {}; Calls: {}' .format(func.__name__, wrapper_func.calls) )
    return func(self, *args, **kwargs)
  wrapper_func.calls=0

  return wrapper_func


class A:

  def __init__(self):
    print('created')

  @logWrapper
  def myfunction1(self, var1):
    print('var1: {}' .format(var1))

  @logWrapper
  def myfunction2(self, var2):
    print('var2: {}' .format(var2))  

if __name__ == "__main__":   
  Pal1=A()
  Pal1.myfunction1('1')
  Pal1.myfunction1('2')
  Pal1.myfunction1('3')
  Pal1.myfunction2('A')

  function_list=inspect.getmembers(Pal1, predicate=inspect.ismethod)
  for func in function_list:
    method_to_call = getattr(Pal1, func[0])
    try:
      #try to call attribute calls if exist otherwise next function
      print( 'Result-> Function: {}; Calls: {}' .format(func[0], method_to_call.calls))
    except AttributeError:
      continue

    #Here: Only when no Exception occured
    method_to_call.calls = 0
    #del method_to_call.calls

  Pal1.myfunction1('X')
  Pal1.myfunction1('Y')

输出:

^{pr2}$

PDB向我展示:

^{3}$

Tags: toselfformatdefcallwrappermethodfunc