消息关闭
    暂无新消息!

为何pycharm对于urllib2.openurl(a).read()无法自动补全?
a = urllib2.openurl('http://www.baidu.com')

urllib2后面加点 可以出来openurl方法,再在a后面加点,read()方法怎么也出不来
但是用dir(a)可以看到a确实是有read()方法的。

但是pycharm为什么不能自动补全呢?

2个回答

︿ 2
这个就是动态语言的缺点之一,静态分析困难。
只有在 a = urllib2.openurl('http://www.baidu.com')
这个语句运行完成后a才被绑定一个类文件的Handler对象。
但是在IDE中编辑时是一种没有运行前静态的情况下,a这个变量对象实际上是空的,IDE没法类型推断的。

在java之类的静态语言里,每个变量使用前都要显示地类型声明,类的属性方法都是可以被IDE查询到的,所以就比较容易实现智能补全。

你说的 用dir(a)可以看到a确实是有read()方法的,那是运行时。
︿ 1
想要帮助IDE进行类型推断在python3做了一些改进

用这面三种办法


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import io

def bar(f):
    assert isinstance(f, io.IOBase)
    f.readlines()


def foo(a: str, b: int):

    a.split()



def bee(l):
    """
    :type l: list
    """
    
    l.append()