共享 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)
此问题与 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)