我有以下描述符,它在@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 类中的方法。