首页 > 解决方案 > 隐式访问当前 Process 范围内可用但在 Python 中的当前模块之外的变量

问题描述

我正在创建一个平台,用户可以在其中编写我的应用程序可以理解的基于键:值的配置。在这些配置中,我提供了编写和调用 python 片段的支持。如下所示:

def func(self, x):
    import MyClass
    return MyClass(x, self.attr1)

attr1 val1
attr2 func(self, x)
attr3 MyClass(x)

可以看出,任何值都可能依赖于配置中的某个其他值,为此在作用域中可以使用诸如self之类的对象。请注意attr2 v/s attr3,它们都创建了同一类但在不同范围内的对象。

  1. attr2评估一个 python 函数并将对self的引用传递给作用域。此函数还需要将所需信息从self传递给MyClass构造函数。
  2. attr3直接调用构造函数,但由于该对象是在 config 对象的范围内创建的,因此它的引用可作为MyClass对象的对象,并且在内部它使用self.parent.attr1进行创建。

这最终会为我的应用程序创建类似的对象,即attr2==attr3

从用户的角度来看,当MyClass需要来自self的许多属性时可能会很麻烦,他们需要手动添加所有这些。其次,最好为用户提供一种同质的方式来创建这种对象,无论是通过 config 还是 python 函数,因为它们都存在于相同的外部范围内。因此,我希望提供以下方式来定义attr2,它应该类似于上面的attr3工作:

def func(x):
    import MyClass
    return MyClass(x)

attr1 val1
attr2 func(x)

有什么方法可以隐式理解特定于应用程序的对象的上下文,这些对象将在客户端代码中创建?

标签: pythonpython-3.xmodulescopeglobal-variables

解决方案


推荐阅读