关于python:get包含函数的上下文

Get containing context of a function

在Python中,如何获取对象(在我的例子中是函数)的包含上下文,以便修改它?例如,如果它是一个方法,那么它的上下文就是类;如果它是一个自由函数,那么它的上下文就是模块。

Related question:
Can a Python decorator of an instance method access the class?


我认为您需要推出自己的版本,但是标准库inspect模块将为您提供您所需要的大部分内容。

inspect.ismethod()inspect.isfunction()将有助于确定函数是否绑定(在类中定义),从而确定您是在寻找类还是模块(希望…因为一个函数可能被定义在另一个作用域而不是模块中…例如,作为另一个函数或方法范围内的本地定义函数,或作为lambda(实际上是相同的东西)

特别要注意的是,方法的im_class不会检索到方法定义的类。但是您可以(使用inspect.getmro()按照类层次结构)找到方法定义的"最新"类。

顺便问一下,我想知道修改一个模块是否就是你想要的…在许多情况下,该模块中的名称可能已经导入到其他地方……)特别是,如果您有Ruby元编程经验,并且正在尝试在Python中复制它,我会担心(对于您和您未来的理智),这是非常不同的,最好不要尝试在Python中做一些粗俗的事情。


您的意思是函数globals()locals()。它们都返回一个分别包含全局变量和局部变量的字典。但是,不能对它们进行任何元编程,因为不允许更改它们。

阿法克除了当前的情况外,没有办法了解任何情况(globals/locals的呼叫者)。