Python 如何在其他模块上下文中执行代码

Python 如何在其他模块上下文中执行代码,python,class,binding,module,metaclass,Python,Class,Binding,Module,Metaclass,有了这段代码,我想得到“main、file”和“abc”,但我得到的是模型库、模型等。。。 我不知道我能做什么。我在b.py中定义了abc,所以我认为它应该在b.py的全局范围内执行 模块model.py: class ModelBase(type): def __new__(cls,name,bases,attrs): module = attrs.pop('__module__'); super_new = super(ModelBase,cls)

有了这段代码,我想得到“mainfile”和“abc”,但我得到的是模型库、模型等。。。 我不知道我能做什么。我在b.py中定义了abc,所以我认为它应该在b.py的全局范围内执行

模块model.py:

class ModelBase(type):
    def __new__(cls,name,bases,attrs):
         module = attrs.pop('__module__');
         super_new = super(ModelBase,cls).__new__
         def test(cls):
             # want to print and references globals from Module b
             gl = globals()
             for i in gl:
                  print i
        new_class = super_new(cls,name,bases,{'__module__':module,'test':test})
        return new_class
class Model(object):
    __metaclass__ = ModelBase
模块b.py:

from model import *
class abc(Model):
    pass
tt = t();
tt.test();

您可以通过检查调用堆栈来找到调用方的全局变量。但是,请注意下面这句话:

CPython实现细节:此函数应用于 仅供内部和专门用途。它不一定存在 在Python的所有实现中

无论如何,获取直接调用方的全局变量所需的代码是

sys._getframe(1).f_globals

您可以通过检查调用堆栈来找到调用方的全局变量。但是,请注意下面这句话:

CPython实现细节:此函数应用于 仅供内部和专门用途。它不一定存在 在Python的所有实现中

无论如何,获取直接调用方的全局变量所需的代码是

sys._getframe(1).f_globals

“返回表示当前全局符号表的字典。这始终是当前模块的字典(在函数或方法中,这是定义它的模块,而不是调用它的模块)。”Model看不到b.py的全局值!这是霍尔比尔,所以问题是我能做什么?我知道问题是什么,但这不是问题所在。“返回表示当前全局符号表的字典。这始终是当前模块的字典(在函数或方法中,这是定义它的模块,而不是调用它的模块)。”Model看不到b.py的全局值!这是霍尔比尔,所以问题是我能做什么?我知道问题是什么,但这不是问题所在。