从功能中获取相应的模块

时间:2011-08-11 14:41:02

标签: python

我想修改模块xyz及其功能:

def modify(fun):
    modulename = fun.__module__ # this is string. ok, but not enough

import xyz
modify(xzy.test)

我的问题是如何在xzy内访问modify的命名空间。有时

globals()[fun.__module__]

的工作原理。但是如果定义modify与其他文件不同,我会遇到问题 代码。

4 个答案:

答案 0 :(得分:21)

您想从名称中获取模块对象吗?在包含所有当前加载的模块的sys.modules字典中查找:

import sys

def modify(func):
    module = sys.modules[func.__module__]

答案 1 :(得分:19)

使用检查模块:

import inspect

def modify(fun):
    module = inspect.getmodule(fun)

这与使用sys.modulesfun.__module__轮询模块相同。虽然getmodule即使fun没有__module__属性也会更加努力。

答案 2 :(得分:7)

你可以尝试

modulename = fun.__module__
module = __import__(modulename)

答案 3 :(得分:-5)

您不想这样做。

  1. 它不起作用。想象一下,您在模块abc中定义了一个函数,然后将其导入xyz。当您致电test.__module__时,'abc'将为modify(xyz.test)。然后,您就会知道更改abc.test并且最终不会修改xyz.test

  2. 应该避免修补猴子。愚弄程序的全局状态是不明智的。而不是这样做,为什么你不能只是制作新的,修改过的东西并使用它?