Ich habe eine Python-Klasse mit mehreren verschiedenen Methoden, die verschiedene Dinge tun, aber ich möchte, dass jeder von ihnen, wenn es ausgeführt wird, seine Namen und Argumentwerte zu speichern, so dass ich kann benutze sie später. Ein Weg, ich fand ist, so etwas zu jeder von ihnen hinzuzufügen:So speichern Sie Klassenmetadaten in Python
frame = inspect.currentframe()
args, _, _, values = inspect.getargvalues(frame)
function_name = inspect.getframeinfo(frame)[2]
function_meta = {arg: values[arg] for arg in args}
self.meta[function_name] = function_meta
Das ist in Ordnung, aber ich würde es vorziehen, sie trocken zu halten und muß nicht kopieren/einfügen diesen identisch Snippet jede Methode ich füge hinzu.
Alternativ könnte ich es in eine separate Funktion drehen save_meta()
, aber dann inspect
werden die Daten von save_meta()
anstelle der Funktion zurück, die sie aufgerufen, nicht wahr? Gibt es eine elegante und wiederverwendbare Möglichkeit, dies zu lösen?
Ah verdammt, du hast recht, das war ziemlich einfach. :) Vielen Dank! Bonusfrage: Gibt es einen einfacheren Weg dies zu tun? – machaerus
@machaerus Sorry, ich habe deine Frage gerade gesehen. Was meinst du mit leichter? – pingul
Ich dachte, dass es vielleicht einen Weg gibt, dies zu tun, ohne eine benutzerdefinierte Funktion zu schreiben. Es scheint eine ziemlich grundlegende Funktionalität zu sein, ich bin irgendwie überrascht, dass es dafür keine eingebaute Methode gibt. – machaerus