为什么相同的模块导入方式不同?

时间:2012-06-28 15:39:29

标签: python import module

正如here所解释的那样,当以不同的方式导入相同的模块时(由于系统路径配置而可能是这样),它的成员是重复的,导致我认为不合需要的行为。

以下是一个例子:

>>> import PIL.Image as A
>>> A
<module 'PIL.Image' from '/.../python2.7/site-packages/PIL/Image.py'>
>>> import Image as B
>>> B
<module 'Image' from '/.../python2.7/site-packages/PIL/Image.py'>
>>> B.Image
<class Image.Image at 0x7f066410b9a8>
>>> A.Image
<class PIL.Image.Image at 0x7f06640cd120>
>>> A.Image==B.Image
False
>>> isinstance(A.Image(),B.Image)
False
>>> isinstance(B.Image(),A.Image)
False

这种行为有原因吗?

1 个答案:

答案 0 :(得分:2)

这是因为PIL很奇怪。大多数Python包都不能通过这样的不同名称获得。坚持导入PIL的一种方式,或者不使用isinstance,你会没事的。

我不知道为什么Python没有检测到两个路径实际上导致同一个文件,并给你相同的模块。这就是Python的方式,它有时会导致问题。