共享 python globals() 跨文件

Sharing python globals() cross files

此问题与 python 的全局范围相关。

下面有两个文件。

fileA.py

import pprint
pprint.pprint(globals())

fileB.py

import fileA

def global_funcB():
    return "global_funcB"

当我运行python fileB.py。 fileA.py 的 globals() 只包含文件 A 的内容。

是否可以从 fileA.py 获取 fileB.py 中 global_funcB 的地址?到目前为止,我只能从 fileB.py.

执行此操作

Note: for my purpose, there is no way to import fileB from fileA.py


[编辑]

让我说清楚我的目的。

loader.py

class loader(object):
    def __init__(self, module):
        print(dir(module))

builder.py + class 函数

import loader

class someobj(object):
   def somefunc(self):
       pass

loader.loader(someobj)

如果我从 fileB 传递一些 module/class 到构建 fileA,那么就可以获取 fileB 的功能。

但是,如果builder.py中的函数是全局的。

builder.py + 全局函数

import loader

def someglobalfunc(self):
   pass

loader.loader(???)

我不知道如何将 globals() 作为 module/class 传递给另一个文件。

如果你想在 B 中导入文件 B 后获取文件 A 的全局变量并在 B 中使用全局变量,这是完全多余的,因为您可以简单地获取 B 中的全局变量并使用它们。

如果您想获取这些全局变量并将它们与 A 一起使用,这是不可能的,因为当时您 运行 文件 A 没有 B在它的名字中 space 这是完全显而易见的。

根据您的编辑:

如果您要将多个全局函数传递给 loader,您可以在全局名称 space 中找到所有函数并将它们传递给 loader。例如,您可以查找具有 __call__ 属性的对象(如果您的 classes 和其他对象不可调用)。或者作为更通用的方式使用 types.FunctionType.

from typing import FunctionType
functions = [obj for obj in globals().values() if isinstance(obj, FunctionType)]

装载机class:

class loader:
    def __init__(self, *modules):
        for module in modules:
            print(dir(module))

您的可执行文件:

import loader
from typing import FunctionType

def someglobalfunc1(self):
   pass
def someglobalfunc2(self):
   pass

functions = [obj for obj in globals().values() if isinstance(obj, FunctionType)]
loader.loader(*functions)