在Python中,如何获取对象的包含上下文(在我的情况下是一个函数),所以我可以修改它?例如,如果它是一个方法,它的上下文就是类;如果它是一个自由函数,它的上下文就是模块。
相关问题:
Can a Python decorator of an instance method access the class?
答案 0 :(得分:1)
我认为您需要推出自己的版本,但标准库inspect
module将为您提供所需的大部分内容。
inspect.ismethod()
和inspect.isfunction()
将帮助确定函数是否绑定(在类中定义),从而确定您是在寻找类还是模块(您希望...因为函数可能在另一个范围而不是模块中定义...例如,作为另一个函数或方法范围内的本地定义的函数,或者作为一个lambda(真的是同样的事情))
特别注意方法的im_class
不会检索定义方法的类。但是你可以(使用inspect.getmro()
)遵循类层次结构并找到'最新的'定义方法的类。
BTW - 我想知道修改模块是否符合你的要求......在很多情况下,该模块中的名称可能已经被导入其他地方......)特别是我会担心(对你和你而言)未来的理智)如果你有ruby元编程经验,并试图在python中复制它 - 它是非常不同的,最好不要尝试在python中做rubyish事。
答案 1 :(得分:0)
您的意思是功能globals()
和locals()
。它们都返回一个包含全局和本地的字典。但是,您不能对它们进行任何元编程,因为不允许更改它们。
AFAIK除了当前(globals
/ locals
的来电者)之外,无法获取任何内容。