Python函数有代码对象__code__
。
sys.settrace
跟踪frame
有一个f_code
代码对象。
对于那些调用追踪器的函数,如何获取函数对象(及其__annotation__
成员)?
到目前为止,通过尝试和错误,我已经实现了:
if hasattr(frame.f_globals.get(frame.f_code.co_name),"__annotations__"):
这似乎对于函数有效,但不适用于类成员函数;更糟糕的是,它会混淆同名的类成员函数和顶层函数。
(我在使用Python 3.2.3 (Xubuntu)。我看到Python 3.3的 inspect
模块有一个signature
函数; 它是否会返回代码对象的注释或者也需要一个函数对象?)
inspect.getframeinfo
元组的function
字段似乎是一个字符串而不是函数对象。而gc方法会存在多个引用的风险? - Will