怎么进行高效代码智能提示、自动补全?
因为刚写 python ,所以我以为 python 在 pycharm 里能像 java 在 idea 里一样点击对象能进入源码去查看,

实例化对象以后能直接 通过对象名去点出 对象的具体方法和属性.
我然后发现这些好像都不能,于是搜了一些要满足上述操作
在官方文档里找到了答案里面提到了 typing ,我于是去搜了一下 typing 是什么 在 python 3.5 里 支持这样
def greeting(name: str) -> str:
return 'Hello ' + name

这有点像 java 的类名 对象名 一样

这样就解决了 自动提示 自动补全的功能
但是对于一个新手 或者一个开发者去使用一个新的类库的时候 肯定不能立马就知道一个对象里面有哪些属性和方法的(难道用一次就去文档查一次吗)
我是这么做的
print(type(obj))

去查看这个对象的类名 然后以 typing 的方式写好
可是这终究是很麻烦的 像 idea + java 可以很快的就知道
在这个帖子里/t/739664有提到
这是 python 这类动态类型语言的通病, ide 没法自动获取类型, 自然没有 java, c/c++之流的 ide 好用

所以我想问一下在两年后这个问题有没有得到改善 还是说我一开始就找错了方向

那也就是说,没有太好的解决方法咯,那实际开发中,如果碰到不熟悉的库,有什么方便开发的优解

应该不会有什么大的进步,要代码提示的话上 Github Copilot 试试。
参考隔壁,有了 TypeScript 后,IDE 推导 JS 的能力就强了很多。但我感觉不会有 type python 这种东西。

没法改善,没有类型,就无法推断,除非走其它路子比如像 Copilot 根据输入和上下文去预测。一般使用类库时,注意对函数参数和返回值的 type hint 补全后体验会好些,但有些库质量本身不好,就没办法了。

其实是可以的,你可以找你需要的对应的库的 type stub ,然后把那个 pyi 文件加入到 ide 的搜索目录里

但是 py 的 type hint 能力很弱,本身也只是作为一个注解,然后你经常会碰到上来一个 Any

最高效的办法是去用那些已经写好了 typing 的类库()

不过实际情况是各种类库质量参差不齐,甚至有的开发者觉得写 typing 不“pythonic”而拒绝添加…

jb 系的现在补全能力还是很强的,不过你追求的使用体验上,大概的问题是需要一个锚点,也就是上下文中至少标记一次类型。目前这个一般由基础库完成的,你使用的库比较老没有标记,所以 jb 无法自动完成类型推断。

感觉其实也可以理解,py 的卖点之一毕竟是接近自然语言水平的表达能力,加类型提示未必方便。不过我觉得如果向社区提供类库,那标记类型还是必要的习惯

copilot 我感觉大部分时候提示的都有点问题

有具体操作的例子或者文档吗

那也就是说,没有太好的解决方法咯,那实际开发中,如果碰到不熟悉的库,有什么方便开发的优解
没有。

有的库会提供 stub file 专门用来注解 type hint, 但基本还是只能翻文档

我不知道 pycharm 现在实现到啥程度了,说说 vsc 的情况。
假设你定义一个函数 foo ,返回值是一个确定的类型,比如 return Bar()这样,那么这个类型的推断是可以传递的,因此可以补全。把鼠标放到函数定义那里,应该是这样的形式 foo: () -> Bar 。

但 python 是不限制你返回值的类型的,你一会返回类型 A ,一会返回类型 B ,编辑器就无法推断你到底返回了啥,判断为 Any ,就没法补全了。

www.jetbrains.com/help/idea/type-hinting-in-product.html

我们组有接近十万行的 Python 3+ 代码,代码要求强制写 typing ,然后提示就很棒。
也不用 PyCharm ,直接 VSCode

写 typing 后就很舒服,但是不知道有没有人遇到过 pycharm 用了 decorator 后 typing 就失效的问题,甚至连参数列表都打不出来了...

不用考虑太多;只是因为你是 Python 新手。

懂的都懂。

可以说是像 kotlin 了,但 python 的缩进还是太让人难受了(

就算是 Java ,你用不熟悉的库的时候,就可以不看文档吗?
而且现在流行的 Python 库基本上都有 type hint 的。

可以不需要,点进去看源码和注释

#17 现在大部分的 Python 库也可以点进去

Python 的这个 typing 本来就只是一个单纯的类型提示作用,用来指定函数的参数类型和返回值类型比较方便,可以让 pycharm 提示你参数是否都带正确了。

想要知道一个类的具体方法最详细的就是去对应库的官方手册看,或者看类的 docstring:

'''
help(类) or help(类.方法)
'''

或者直接

'''
print(dir(类))
'''

dir 函数会打印出类中所有的方法

pycharm 也可以跳转到类或者函数的定义那里,只需要把光标移到类名或者方法名那里,然后右键-->跳转-->声明或实例
(如果我没记错的话)

如果是对象的话就没办法看对吧

感谢