If you wish to count how many times a method has been called, no matter which instance called it, you could use a class member like this:
class Foo(object):
calls=0 # <--- call is a class member
def baz(self):
Foo.calls+=1
foo=Foo()
bar=Foo()
for i in range(100):
foo.baz()
bar.baz()
print('Foo.baz was called {n} times'.format(n=foo.calls))
# Foo.baz was called 200 times
When you define calls
this way:
class Foo(object):
calls=0
Python places the key-value pair ('calls', 0) in Foo.__dict__
.
It can be accessed with Foo.calls
.
Instances of Foo
, such as foo=Foo()
, can access it with foo.calls
as well.
To assign new values to Foo.calls
you must use Foo.calls = ...
.
Instances can not use foo.calls = ...
because that causes Python to place a new and different key-value pair in foo.__dict__
, where instance members are kept.