Si desea contar cuántas veces un método que se ha llamado, no importa qué instancia lo llamó, se puede utilizar un miembro de la clase de esta manera:
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
Al definir calls
esta manera :
class Foo(object):
calls=0
Python coloca el par clave-valor ('llamadas', 0) en Foo.__dict__
.
Puede ser visitada con Foo.calls
. Las instancias de Foo
, como foo=Foo()
, también pueden acceder a ella con foo.calls
.
Para asigne nuevos valores a Foo.calls
debe utilizar Foo.calls = ...
. Las instancias no pueden usar foo.calls = ...
porque esto hace que Python coloque un par nuevo y diferente de clave-valor en foo.__dict__
, donde se guardan los miembros de la instancia.
de acuerdo: duplicado – gecco
@PaulManta: I d isagree Su enlace no está relacionado con los campos estáticos de la clase (como dice OP), sino con "_ el miembro estático en el nivel de función, en oposición al nivel de clase_", como lo establece OP en la pregunta a la que dio un enlace de uso. – Tadeck
@Tadeck La palabra 'clase' ni siquiera aparece en la pregunta ...Pero la frase 'miembro estático ** de una función **' sí lo hace. –