0

这个问题与python的全局范围有关。

下面有两个文件。

文件A.py

import pprint
pprint.pprint(globals())

文件B.py

import fileA

def global_funcB():
    return "global_funcB"

当我跑步时python fileB.py。fileA.py 的 globals() 只包含 fileA 的内容。

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

注意:出于我的目的,无法从 fileA.py 导入 fileB


[编辑]

让我清楚地描述我的目的。

加载器.py

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

builder.py + 类函数

import loader

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

loader.loader(someobj)

如果我从fileB传递一些模块/类来构建fileA,那么就可以获取fileB的函数。

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

builder.py + 全局函数

import loader

def someglobalfunc(self):
   pass

loader.loader(???)

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

4

1 回答 1

0

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

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

根据您的编辑:

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

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

加载器类:

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)
于 2016-11-06T09:58:09.753 回答