Python模块中的名称冲突

时间:2016-01-23 12:21:57

标签: python name-clash

我的家庭作业存在这个问题:

  

对于module1,module2和下面显示的客户端模块,如果导入的标识符不是完全限定的,则指示哪些导入的标识符会导致名称冲突。

enter image description here

我回答:
func_2module2之间发生module3次冲突 func_3module2

之间发生main次冲突

但是,文中列出的答案只是
func_3
我错了吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

在module1中,没有名称冲突,因为module1不知道module2和client模块是否存在。 module2不知道module1和client模块是否存在。但是,客户端模块导入module1和module2。因此,它已定义func_1一次(在module1中),func_2定义两次(在module1和module2中)和func_3两次(在module2和client模块中)。为了说明,我将写两个文件:main_module和imported_module。

imported_module如下所示:

x = True
print 'x in imported_module: %s' % ('x' in locals())
print 'y in imported_module: %s' % ('y' in locals())

main_module看起来像这样:

y = True
from imported_module import *
print "" # put a blank line between what imported_module prints and what
         # main_module prints
print 'y in main_module: %s' % ('y' in locals())
print 'x in main_module: %s' % ('x' in locals())

运行main_module的结果:

y in imported_module: False
x in imported_module: True

y in main_module: True
x in main_module: True

main_module有两个变量,因为它定义了y并导入了x。 imported_module有x,因为它定义了它,但它没有y。