写程序时的一个疑惑:有两个文件 a.py 和 b.py,详细如下:

2016-03-05 23:22:35 +08:00
 goalong
#a.py
class Test():
def __init__(self):
self.value = 10
def output(self):
return self.value

t = Test()
print(t.value)

#b.py 只有这一个导入,没别的东西
from a import Test

运行 b.py 时会输出 a.py 中 t.value 的值,即 10 , 这是什么原因?
2602 次点击
所在节点    Python
8 条回复
just1
2016-03-05 23:26:00 +08:00
if_name_=='_main_':
t = Test()
print(t.value)
lxy42
2016-03-05 23:29:41 +08:00
import 会执行 a.py 的代码,所以输出 10 。建议将 a.py 修改为
if __name__ == '__main__':
t = Test()
print(t.value)
goalong
2016-03-05 23:29:48 +08:00
@just1 这样运行 b.py 就不会出现奇怪的输出了,但是刚才输出 10 的原因是什么呢?很不解
goalong
2016-03-05 23:33:10 +08:00
@lxy42 我只是 import 了 Test 这个类啊,为什么 a.py 中的 print 会在执行 b.py 时也输出呢?
lxy42
2016-03-05 23:37:47 +08:00
@goforalong 解释器会运行 a.py ,然后再把 Test 类到导入到当前执行环境(也就是赋值给 Test)
yech1990
2016-03-05 23:37:52 +08:00
@goforalong import 类就是运行定义类的文件啊
goalong
2016-03-05 23:45:13 +08:00
@lxy42 是这样吗,以前我想象的 import 大概就是把某个对象的定义给导入到当前的环境中呢,谢谢你的回答,我要多了解下这方面的东西了
goalong
2016-03-05 23:48:08 +08:00
@yech1990 import 是这样运行的吗,我一直当 import 懒得重新再定义某个对象了,所以把那个对象的定义给 import 进来一下就好了,谢谢你的解答

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/261401

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX