Python导入模块获取全局变量

2024-04-20 12:47:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个Python脚本,一个测试类.py地址:

import numpy
zz = numpy

class Something(object):
    def __init__(self):
        self.xp = zz

还有一个测试脚本.py地址:

from testclass import Something
x = Something()
print(x.xp)

我预料到了测试脚本.py抛出一个错误,因为我认为testscript只导入类Something(使用它的__init__方法),而不是全局变量zz。因此,考虑到这个问题,我的问题是,当从模块导入时,Python是否“运行”了模块文件中的所有内容?你知道吗


Tags: 模块frompyimportselfnumpy脚本object
1条回答
网友
1楼 · 发布于 2024-04-20 12:47:40

是的。执行时:

from testclass import Something

其效果与:

import testclass
Something = testclass.Something

一般来说,Python解释器无法预先知道模块公开了哪些对象(除非在^{}中显式地命名它们)。对于极端情况,请考虑以下几点:

a.py

import random

if random.random() > 0.5:
    class Foo(object):
        pass
else:
    class Bar(object):
        pass

运行from a import Foo失败的几率为50%,因为a模块对象可能有Foo属性,也可能没有。你知道吗

相关问题 更多 >