正如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
这种行为有原因吗?
答案 0 :(得分:2)
这是因为PIL很奇怪。大多数Python包都不能通过这样的不同名称获得。坚持导入PIL的一种方式,或者不使用isinstance
,你会没事的。
我不知道为什么Python没有检测到两个路径实际上导致同一个文件,并给你相同的模块。这就是Python的方式,它有时会导致问题。