从父名称空间获取python变量的名称

时间:2019-07-06 01:50:42

标签: python globals

我需要获取python中变量的名称。 例如:

task = EmailTask()

我需要将“任务”映射到实际对象。

此用例如下: 我正在构建一个ETL工具,它将具有许多可重复使用的通用任务,而不是用户为他创建的每个实例提供额外的任务名称,而是使用用户选择的变量名称。此变量名称仅用于记录目的。用例示例:

process_task = MoveDataTask()
email_task = EmailTask()

job = Job(
    tasks: [process_task, email_task])

job.start()

由于任务将在父名称空间中声明,因此我将不得不使用globals()。我了解我将对用户声明整个“职位”的方式施加一些限制,因为他将不得不为每个任务分配一个变量名,而不是执行以下操作:

job = Job(
    tasks: [MoveDataTask(), EmailTask()])

我知道globals()几乎给了我想要的东西,但是我对使用它有所保留,因为它有点不标准地使用了python。同样,据我了解,globals()中的同一对象可以有多个名称,因此,我需要以某种方式获取父名称(上面示例中的“ process_task”,“ email_task”)。

这种方法是否还缺少其他陷阱/问题/东西?

1 个答案:

答案 0 :(得分:0)

创建辅助函数(可能是为了命名空间而在专用模块中)并将它们传递给作业:

def process_task():
    return MoveDataTask()

def email_task():
    return EmailTask()

# ...
job.add_task(process_task)
job.add_task(email_task)

# ...
for task in job.tasks:
    task()