У меня есть класс Python с несколькими различными методами, выполняющими разные вещи, но я бы хотел, чтобы каждый из них, когда он запускался, сохранял его значения имени и аргумента, чтобы я мог используйте их позже. Один из способов я нашел, чтобы добавить что-то вроде этого, чтобы каждый из них:Как сохранить метаданные метода класса в 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
Это хорошо, однако, я бы предпочел, чтобы держать его DRY и не должны копировать/вставить этот фрагмент, идентичный к каждый способ добавляю.
С другой стороны, я мог бы превратить его в отдельную функцию save_meta()
, но затем inspect
будет возвращать данные из save_meta()
, вместо функции вызвавшей его, не так ли? Есть ли элегантный и многоразовый способ решения этого?
Ах проклятый, ты прав, это был довольно простой. :) Благодаря! Бонусный вопрос: есть ли более простой способ сделать это? – machaerus
@machaerus Извините, я видел ваш вопрос только сейчас. Что вы имеете в виду с облегчением? – pingul
Я подумал, что, возможно, есть способ сделать это без написания пользовательской функции. Похоже, это довольно простая функциональность, я удивлен, что для этого нет встроенного метода. – machaerus