static variables

Peter Otten __peter__ at web.de
Tue Dec 1 04:01:54 EST 2015


Ulli Horlacher wrote:

> Steven D'Aprano <steve at pearwood.info> wrote:
> 
>> A better and more general test is:
>> 
>> if hasattr(a, 'x'): print('attribute of a')
> 
> Fine!
> 
> I have now:
> 
> def a(x=None):
>   if not hasattr(a,'x'): a.x = 0
>   a.x += 1
>   print('%d:' % a.x,x)
> 
> This simply counts the calls of a()
> 
> But, when I rename the function I have to rename the attribute also.
> Is it possible to refer the attribute automatically to its function?
> Something like:
> 
> def a(x=None):
>   if not hasattr(_function_,'x'): _function_.x = 0
>   _function_.x += 1
>   print('%d:' % _function_.x,x)

Not directly, but there are workarounds:

def with_function(f):
    return functools.partial(f, f)

@with_function
def foo(self, x=None):
    if not hasattr(self, "x"):
        self.x = 0
    self.x += 1
    print("{} called {} times".format(self.__name__, self.x))





More information about the Python-list mailing list