繁体   English   中英

在 Python 中,如何在不更改命名空间的情况下将一个文件包含(不导入)到另一个文件中,宏样式?

[英]In Python, how can I include (not import) one file within another file, macro style, without changing namespace?

首先,我确实知道“导入”。 当我尝试“导入”时,它不起作用。 我想要做的是将一个模块分成两部分,其中一个可以由一个组编辑,另一个不能。 我希望团队编写定义明确的“检索函数”,而不会受到诱惑或无法编辑运行它们的后端代码(即使是偶然的)。 “导入”上命名空间的变化妨碍了我。 我正在寻找在 File_B 中包含 File_A 文本的宏样式,以便像它是 File_B 的一部分一样内联运行。

这就是我正在做的事情:

我有一些通用代码,旨在依次调用信息检索函数列表,并以统一的方式存储信息。 为此,我将其文本名称添加到列表中:

DataTypes = ['TypeA','TypeB','TypeC']

...然后定义一个知道如何获取每种类型的 function,并返回一个填充的 object class:

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 基本知识但经常有不良编码习惯但需要能够经常自定义收集和显示的内容的人编辑。 我已经有一个后端来检查列表并调用函数,但我只想将这些定义从后端代码的 rest 移到一个单独的文件中,但就像它们就在那里一样内联。 (即将“希望没有人碰它”变成“人们必须不让 go 碰它”)

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 子句、验证步骤以确保数据正确填充并且不包含不正确的类型或坏东西,以及通知团队是否以及在哪里出现问题但仍在处理的代码项目的 rest。目标是进行编辑的人不会破坏检查的 rest,即使他们的编辑破坏了其中一项检查。)

这可以通过execfile()来完成,但您应该考虑为此使用其他一些机制,例如多态性或插件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM