Python 如何在其他模块上下文中执行代码
有了这段代码,我想得到“main、file”和“abc”,但我得到的是模型库、模型等。。。 我不知道我能做什么。我在b.py中定义了abc,所以我认为它应该在b.py的全局范围内执行 模块model.py: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)
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的全局值!这是霍尔比尔,所以问题是我能做什么?我知道问题是什么,但这不是问题所在。