克隆模块并对副本进行更改

时间:2011-09-20 09:33:40

标签: python inheritance module copy python-3.x

是否可以复制模块,然后更改副本?换句话说,我可以从模块继承,然后覆盖或修改它的一部分吗?

2 个答案:

答案 0 :(得分:3)

  

换句话说,我可以从模块继承,然后覆盖或修改它的一部分吗?

import module

您可以使用module中的内容或覆盖脚本中的内容。

您也可以这样做来创建“派生”模块。

将此名称命名为“module_2”。

from module import *

哪个进口一切。然后,您可以使用module中的内容或覆盖此新模块中的内容“module_2”。

然后可以执行其他脚本

import module_2

从模块_2中的覆盖修改模块中获取所有内容。

答案 1 :(得分:0)

Python模块的命名空间是可写的。考虑:

# contrived.py
CONST = 100
def foo():
    return CONST

您可以在导入后修改CONST的值:

import contrived
contrived.CONST = 200
contrived.foo() # 200

但是,只能导入单个模块实例,因此无论如何都无法创建克隆并继续使用原始模块。如果您不需要访问原始模块,那么创建一个包装器模块并覆盖您想要更改的内容是相当简单的。

要注意的一件事是,像这样的代码将无法正常工作:

# clone.py
from contrived import *
CONST = 200

这实际上会在CONST的命名空间中分配clone,从contrived导入的函数将继续引用CONST命名空间中的contrive

import clone
clone.foo() # 100

在这种情况下,您可以执行以下操作:

# clone.py
import contrived
contrived.CONST = 200
from contrived import *