Hm, grundsätzlich würde ich empfehlen, nach einem geeigneten Test-Framework zu suchen bzw einer Bibliothek für
Reflexion, die deine Anforderungen erfüllt.
Falls man es denn wirklich selbst machen möchte, z.B. weil man nicht fertiges gefunden hat, dann wird's haarig und zum Teil auch abhängig von der verwendeten Python-Implementierung. So kann man mittels
inspect.currentframe() zumindest unter CPython den aktuell oben auf dem Stack liegenden Frame holen. Mittels
inspect.getframeinfo() lassen sich dann relativ bequem weitere Informationen aus diesem Frame holen. Das ganze kann in einem ersten Ansatz dann so aussehen (Ausgaben sind aus IPython):
Code: Alles auswählen
In [1]: from inspect import currentframe, getframeinfo
In [2]: class Foo(object):
...: def foo(self):
...: return getframeinfo(currentframe())
...:
In [3]: f = Foo()
In [4]: f.foo()
Out[4]: Traceback(filename='<ipython-input-2-d28ecd2305e1>', lineno=3, function='foo', code_context=[u' return getframeinfo(currentframe())\n'], index=0)
In [5]: f.foo().function
Out[5]: 'foo'
So kommst du also schonmal an den Namen der Methode. Jetzt geht es "nur noch" darum, wie ein Aufrufer bzw die von dir gewünschte Unterklasse an den entsprechenden Frame kommt. Dafür müsste ich jetzt sicherlich selber etwas länger recherchieren. Vielleicht weiß es ja jemand anders.
Jedenfalls ist das `inspect`-Modul ein ganz guter Ansatz für solche Probleme. Wie gesagt: Bevor du dir irgendwas zusammenhackst, prüfe vielleicht nochmal, ob ein entsprechendes Test-Framework sowas von Haus aus anbietet...