[python] Počítání volání metod

martin.stiborsky na gmail.com martin.stiborsky na gmail.com
Čtvrtek Prosinec 20 22:40:57 CET 2007


Zdravím, dneska budu ještě jednou otravovat.
Michal Vyskočil mi poradil, jak přijít na jméno volané metody, za to
mu díky, mně to hned posloužilo k realizování mého záměru, počítání
kolikrát byla metoda zavolána, nevím jestli to neřeším úplně blbě.

Totiž, chci to využít na statisrtiky na mých webových stránkách, ve
třídě která obsluhuje servírování dat z databáze a jejich renderování
do šablon, mám pro články/kategorie/indexovou stránku vlastní metodu,
takže mě napadlo, že vždy když někdo chce něco zobrazit, tak se tato
metoda musí zavolat a tím pádem já tohle můžu sledovat a počítat podle
toho, spolu s id volaného objektu z databáze které metoda dostane pak
můžu určit co přesně bylo v požadavku.

Takže co jsem vymyslel a funguje to:

# -*- coding: utf-8 -*-

from inspect import *

results = dict()

def check(classname):
	class_name = classname()
	method_name = stack(class_name)[1][3]
	if not method_name in results.keys():
		results[method_name] = 1
	else:
		results[method_name] += 1

def print_results():
	for key,value in results.iteritems():
		print '%s - %s' % (key, value)

class App1:

	def foo(self):
		check(self.__class__)

	def bar(self):
		check(self.__class__)

App1().bar()
App1().bar()
App1().bar()
App1().bar()

App1().foo()

print_results()

Vrací to správný výsledek, jenom se bojím, že moje myšlenka je úplně
špatná, takže prosím o kritiku.
Děkuji.


Další informace o konferenci Python