有没有什么办法可以获得一个应用于函数的装饰器列表,而不需要像装饰装饰器这样的hackish东西?
解决方法:
并不是的.首先,因为并非所有装饰器都返回包装函数;装饰器可以简单地修改现有的函数(也许在它上面设置一个属性) – 很明显,Python没有记录触及每个属性的函数.其次,虽然您可以向垃圾收集器询问包含对装饰函数的引用的闭包,以及具有该闭包的函数,但并非每个在闭包中保存对另一个函数的引用的函数都是由装饰器应用的包装器.然后是带有参数的装饰器的问题;在进入实际的装饰功能之前,还有一层额外的内部函数.最后,并非所有装饰器都是函数,并非所有装饰对象都是函数.
简而言之,您可能会在某些时候对其进行近似,但即使它有效,它也将是一个仅适用于CPython的巨大黑客攻击.没有任何简单的,有记录的方法来做到这一点.