У меня есть следующий дескриптор, который сохраняет конфигурацию внутри моего класса после вызова метода, помеченного @saveconfig
:
class saveconfig(object):
def __init__(self, f):
self.f = f
def __get__(self, instance, owner):
def wrapper(*args):
self.f(instance, *args)
instance.cfg.write()
instance.paramcfg.write()
return wrapper
Используется так:
class pbtools():
@saveconfig
def getip(self, ip):
(...)
Работает нормально. Теперь я хочу получить оформленный метод с помощью getattr. Но так как метод обернут дескриптором, я получаю только wrapper
в результате:
pbt = pbtools()
# results in "<function wrapper at 0x23cced8>:"
method = getattr(pbt, "getip")
Как я могу получить доступ к упакованному методу getip
с помощью getattr, чтобы иметь возможность вызывать его по его имени? (конечно, я не могу получить доступ к методу напрямую, иначе мне не пришлось бы это делать).
Дополнительное объяснение:
Скрипт вызывается из командной строки. Мне нужно сопоставить параметр командной строки (строку) с методом с тем же именем, чтобы вызвать его. Кроме того, мне нужно сопоставить любые дополнительные параметры из командной строки с параметрами метода, например:
pbtools getip 192.168.178.123 #-> calls getip with parameter 192.168.178.123
Поскольку я не могу получить оригинальный метод, я не знаю, сколько у него параметров, чтобы отобразить их. У меня есть несколько методов, которые оформлены таким образом, потому что я хочу перенести сквозную задачу сохранения конфигурации из методов в классе pbtools.