Jeśli chcesz policzyć ile razy metoda została wywołana, bez względu na wystąpienie nazwał go, można użyć elementu klasy tak:
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
Podczas definiowania calls
ten sposób :
class Foo(object):
calls=0
Python umieszcza parę klucz-wartość ('połączenia', 0) w Foo.__dict__
.
Może to być z dostępem z Foo.calls
. Wystąpienia Foo
, takie jak foo=Foo()
, mogą również uzyskać do niego dostęp za pomocą foo.calls
.
Aby przypisać nowe wartości do Foo.calls
należy użyć Foo.calls = ...
. Instancje nie mogą używać foo.calls = ...
, ponieważ powoduje to, że Python umieszcza nową i inną parę klucz-wartość w foo.__dict__
, gdzie przechowywane są elementy instancji.
zgadzam się: duplikat – gecco
@PaulManta: I d isagree. Twój link nie jest powiązany z polami statycznymi klasy (jak mówi OP), ale "członem statycznym na poziomie funkcji, w przeciwieństwie do poziomu klasy_", jak podaje OP w ramach pytania, któremu dałeś użyć łącza. – Tadeck
@Tadeck Słowo "klasa" nawet nie pojawia się w pytaniu ...Ale fraza "statyczny element ** funkcji **" ma. –