使用此代码我想获得“主要,文件”和“ abc ”,但我得到ModelBase,Model等。 。 我不知道我能做什么。我在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();
答案 0 :(得分:1)
您可以通过检查调用堆栈来查找调用者的全局变量。但是,请注意评论in the docs of sys._getframe
:
CPython实现细节:此函数应该用于 仅限内部和专门用途。它不能保证存在 在Python的所有实现中。
无论如何,获得直接调用者的全局变量所需的代码是
sys._getframe(1).f_globals