Python 绝地完成不适用于使用Image.open()方法创建的图像对象

Python 绝地完成不适用于使用Image.open()方法创建的图像对象,python,autocomplete,python-imaging-library,code-completion,python-jedi,Python,Autocomplete,Python Imaging Library,Code Completion,Python Jedi,我正在使用deoplete绝地在Neovim内部提供自动完成。我发现,如果在使用时使用方法创建图像对象实例,则自动完成不起作用。但对于使用方法创建的图像实例,自动完成功能可以正常工作 经过多次调试,我终于找到了原因。因为绝地软件包无法为Image.open()方法创建的映像实例提供补全 下面的代码显示了这些差异: import jedi source1 = ''' from PIL import Image im = Image.new('test.jpg', (128, 128)) im.

我正在使用deoplete绝地在Neovim内部提供自动完成。我发现,如果在使用时使用方法创建图像对象实例,则自动完成不起作用。但对于使用方法创建的图像实例,自动完成功能可以正常工作

经过多次调试,我终于找到了原因。因为绝地软件包无法为
Image.open()
方法创建的映像实例提供补全

下面的代码显示了这些差异:

import jedi

source1 = '''
from PIL import Image
im = Image.new('test.jpg', (128, 128))
im.
'''

script1 = jedi.Script(source1, 4, len('im.'), 'example1.py')
print(script1.completions())

source2 = '''
from PIL import Image
im = Image.open('test.jpg')
im.
'''
script2 = jedi.Script(source2, 4, len('im.'), 'example2.py')
print(script2.completions())
由于这两种方法都返回图像对象,我不知道为什么自动完成的行为不同

版本信息
  • Python:Python 3.6.8
  • 绝地武士:0.13.3
  • 枕头:5.2.0

问题通常是像
Image.open()
这样的东西做缓存之类的事情,在缓存中几乎不可能推断出正确的类型

在这个例子中(请看),绝地试图遵循
im
->
的核心(…)
->其他
im
->
工厂(…)
->
工厂
看起来像
工厂,接受=打开[i]
->但什么是
打开的
->它被定义为一个空的
{/code>
,并填入
寄存器
或从外部->
寄存器\u open
不在同一文件中调用

这就是绝地停止寻找解决方案的地方。因此,您可以看到,推断类型并不总是可能的。甚至我也不确定返回的类型是什么,我试着看了10分钟。解决方案通常是为此创建存根/类型注释