为何Python导入RE父类时会执行OS相关代码却未导入CSV模块?
问题原因解析
- Python的模块导入机制是加载并执行整个模块的顶层代码,不管你只导入模块中的某一个类或函数。所以你在parent.py里写的OS相关打印、目录切换代码,如果是放在类/函数外部的顶层代码,就会在
from parent import RE时被自动执行。 - 至于CSV模块没出现在child.py的命名空间里:
from parent import RE的作用只是把parent模块中的RE类单独导入到当前命名空间,parent模块自身导入的CSV模块属于parent模块的私有命名空间,不会被自动带到child.py里。除非你显式写from parent import csv,或者在parent.py里把csv模块作为导出对象,否则child.py访问不到。 - 要避免顶层代码在导入时执行,把这些操作放到
if __name__ == "__main__":代码块里就行——这个判断只有在直接运行parent.py时才会成立,导入时不会执行块内代码。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

