因为刚写 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 好用
所以我想问一下在两年后这个问题有没有得到改善 还是说我一开始就找错了方向
那也就是说,没有太好的解决方法咯,那实际开发中,如果碰到不熟悉的库,有什么方便开发的优解
1
dcsuibian 2022-07-17 23:43:19 +08:00
应该不会有什么大的进步,要代码提示的话上 Github Copilot 试试。
参考隔壁,有了 TypeScript 后,IDE 推导 JS 的能力就强了很多。但我感觉不会有 type python 这种东西。 |
2
disk 2022-07-17 23:57:45 +08:00
没法改善,没有类型,就无法推断,除非走其它路子比如像 Copilot 根据输入和上下文去预测。一般使用类库时,注意对函数参数和返回值的 type hint 补全后体验会好些,但有些库质量本身不好,就没办法了。
|
3
learningman 2022-07-18 00:02:59 +08:00 via Android
其实是可以的,你可以找你需要的对应的库的 type stub ,然后把那个 pyi 文件加入到 ide 的搜索目录里
|
4
learningman 2022-07-18 00:03:57 +08:00 via Android
但是 py 的 type hint 能力很弱,本身也只是作为一个注解,然后你经常会碰到上来一个 Any
|
5
Trim21 2022-07-18 00:05:42 +08:00 via Android
最高效的办法是去用那些已经写好了 typing 的类库()
不过实际情况是各种类库质量参差不齐,甚至有的开发者觉得写 typing 不“pythonic”而拒绝添加… |
6
LeeReamond 2022-07-18 00:44:39 +08:00 via Android
jb 系的现在补全能力还是很强的,不过你追求的使用体验上,大概的问题是需要一个锚点,也就是上下文中至少标记一次类型。目前这个一般由基础库完成的,你使用的库比较老没有标记,所以 jb 无法自动完成类型推断。
@Trim21 感觉其实也可以理解,py 的卖点之一毕竟是接近自然语言水平的表达能力,加类型提示未必方便。不过我觉得如果向社区提供类库,那标记类型还是必要的习惯 |
8
blankmiss OP @learningman 有具体操作的例子或者文档吗
|
9
GeruzoniAnsasu 2022-07-18 02:11:19 +08:00
> 那也就是说,没有太好的解决方法咯,那实际开发中,如果碰到不熟悉的库,有什么方便开发的优解
没有。 有的库会提供 stub file 专门用来注解 type hint, 但基本还是只能翻文档 |
10
imycc 2022-07-18 04:20:31 +08:00
我不知道 pycharm 现在实现到啥程度了,说说 vsc 的情况。
假设你定义一个函数 foo ,返回值是一个确定的类型,比如 return Bar()这样,那么这个类型的推断是可以传递的,因此可以补全。把鼠标放到函数定义那里,应该是这样的形式 foo: () -> Bar 。 但 python 是不限制你返回值的类型的,你一会返回类型 A ,一会返回类型 B ,编辑器就无法推断你到底返回了啥,判断为 Any ,就没法补全了。 |
11
learningman 2022-07-18 07:38:45 +08:00 via Android
|
12
devcat9 2022-07-18 07:48:33 +08:00
我们组有接近十万行的 Python 3+ 代码,代码要求强制写 typing ,然后提示就很棒。
也不用 PyCharm ,直接 VSCode |
13
Lattez 2022-07-18 09:21:29 +08:00
写 typing 后就很舒服,但是不知道有没有人遇到过 pycharm 用了 decorator 后 typing 就失效的问题,甚至连参数列表都打不出来了...
|
14
featureoverload 2022-07-18 09:38:15 +08:00
不用考虑太多;只是因为你是 Python 新手。
懂的都懂。 |
15
clf 2022-07-18 10:08:27 +08:00
可以说是像 kotlin 了,但 python 的缩进还是太让人难受了(
|
16
fgwmlhdkkkw 2022-07-18 10:19:39 +08:00
就算是 Java ,你用不熟悉的库的时候,就可以不看文档吗?
而且现在流行的 Python 库基本上都有 type hint 的。 |
17
blankmiss OP @fgwmlhdkkkw 可以不需要,点进去看源码和注释
|
18
fgwmlhdkkkw 2022-07-18 11:53:22 +08:00
@blankmiss #17 现在大部分的 Python 库也可以点进去
|
19
Syiize 2022-07-18 18:06:09 +08:00 via Android
Python 的这个 typing 本来就只是一个单纯的类型提示作用,用来指定函数的参数类型和返回值类型比较方便,可以让 pycharm 提示你参数是否都带正确了。
想要知道一个类的具体方法最详细的就是去对应库的官方手册看,或者看类的 docstring: ''' help(类) or help(类.方法) ''' 或者直接 ''' print(dir(类)) ''' dir 函数会打印出类中所有的方法 |
20
Syiize 2022-07-18 18:07:46 +08:00 via Android
pycharm 也可以跳转到类或者函数的定义那里,只需要把光标移到类名或者方法名那里,然后右键-->跳转-->声明或实例
(如果我没记错的话) |