是否可以复制模块,然后更改副本?换句话说,我可以从模块继承,然后覆盖或修改它的一部分吗?
答案 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 *