在Python中如何像宏一样在一个文件中包含另一个文件,而不改变命名空间?
首先,我知道什么是'import'。但是当我尝试使用'import'时,它并没有按我想的那样工作。我想把一个模块分成两个部分,其中一个部分可以被一个小组编辑,而另一个部分则不能。我希望这个小组能够编写明确的“检索函数”,而不会有机会或诱惑去修改运行这些函数的后端代码(即使是无意中)。'import'时的命名空间变化让我感到困扰。我希望能像宏一样把File_A的内容包含到File_B中,让它在File_B中运行,就好像它是File_B的一部分。
这是我正在做的:
我有一些通用的代码,旨在依次调用一系列信息检索函数,并以统一的方式存储信息。为此,我把它们的文本名称添加到一个列表中:
DataTypes = ['TypeA','TypeB','TypeC']
... 然后定义一个函数,知道如何获取每种类型,并返回一个填充好的对象类:
def Get_TypeA:
# do some stuff to retrieve info
InfoObj Data
# Populate Data with the info I got
return Data
def Get_TypeB:
# etc. etc.
return Data
def Get_TypeC:
# etc. etc.
return Data
# Backend code below this line, hopefully nobody touches it?
# (But really it would be best if this was in a different file
# that is harder to mess with and has locked-down permissions.)
class InfoObj:
# stuff stuff definitions methods etc.
这些函数将由一些只懂基本Python知识但编码习惯不太好的人员编辑,他们需要频繁自定义收集和显示的信息。我已经有一个后端代码来检查列表并调用这些函数,但我只是想把这些定义移到一个与其他后端代码分开的文件中,但又能像在同一个文件里一样工作。(也就是说,把“希望没人碰它”变成“人们必须特别去碰它”)
Python有这个功能吗?
当我尝试使用Import时,检索函数与InfoObj的定义失去了联系。这种情况无论我使用'import otherFile'还是'from otherFile import *'都会发生。
编辑:这是我用来以标准方式检索各种类型的代码:
THISMODULE = sys.modules[__name__]
for type in DataTypes:
RetrievalFn = getattr( THISMODULE, 'Get_'+type )
Data = RetrievalFn()
StoreInDB(Data)
(虽然这只是基本的内容,但还有try/except语句、验证步骤以确保数据被正确填充且不包含错误类型或坏东西,以及代码来通知团队如果哪里出错,但仍然处理其余的项目。目标是让进行编辑的人不会破坏其他检查,即使他们的编辑破坏了其中一个检查。)