2

正如这里所解释的,当以不同的方式导入相同的模块时(这可能是由于系统路径配置的原因),它的成员是重复的,这会导致我认为不希望出现的行为。

这是一个例子:

>>> 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

这种行为有原因吗?

4

1 回答 1

2

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

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

于 2012-06-28T15:41:35.210 回答