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 をインポートする 1 つの方法に固執するか、使用しなくても問題ありませんisinstance

2つのパスが実際に同じファイルにつながっていることをPythonが検出せず、同じモジュールを提供する理由に対する答えはわかりません。これは Python が行う方法であり、時には問題を引き起こす可能性があります。

于 2012-06-28T15:41:35.210 に答える