Python python 中.不出方法类库中对应的方法提示

啊神 · 2022年06月10日 · 最后由 王稀饭 回复于 2022年06月22日 · 4163 次阅读


请假一下大佬们,想知道是我设置有问题吗,我想要的是在在第一张图里面 sheet.后面也能回显跟什么方法,是我 Import 的不正确吗

最佳回复

这个是语言特性造成的。

python 不是强类型语言,没有强要求指定每个变量的类型。实际上每个变量的实际数据类型都是可以随时变化的。比如可以随时把一个原来存储对象的变量改为存储 int。

这种情况下,按你图 1 里的写法, ide 是推断不出来你这个变量是什么类型的东西,自然无法做方法提示。能推断出来的方法,要不是在程序运行时(毕竟里面有具体的值了,instanceOf 一下就知道类型了),或者是熟悉变量实际类型的人。

python 3.5 开始提供了类型注解支持 来让 ide 可以推断出实际的变量类型。你这种类似字典取值的写法,实际内部调用的是 __getitem__ 这个魔法函数,要做到类型提示的话,可以试试自己想办法重写 wb 这种数据类型里的这个魔法函数,加上类型注解支持。

图二能通过.给出提示,是因为你的 wk 变量是直接由库函数返回的,ide 可以精确知道 wk 变量的类型,所以能给出它包含的各种方法。
图一之所以不能.出来,是因为 sheet 变量是 wb 字典变量的某一个值,ide 不知道你这个 wb['login'] 到底是个啥玩意儿,它可能是一个字符串,可能是一个 int,无从猜测,取决于你的实际数据(也就是 wb['login'] 是啥只有你自己知道),所以无法提供任何方法名称。

共收到 3 条回复 时间 点赞

打印看看第一张图里的 sheet 是什么类型?看看是对象类型还是字符串类型,然后还可以打印一下 dir(sheet) 看看它的属性、方法有哪些

这个是语言特性造成的。

python 不是强类型语言,没有强要求指定每个变量的类型。实际上每个变量的实际数据类型都是可以随时变化的。比如可以随时把一个原来存储对象的变量改为存储 int。

这种情况下,按你图 1 里的写法, ide 是推断不出来你这个变量是什么类型的东西,自然无法做方法提示。能推断出来的方法,要不是在程序运行时(毕竟里面有具体的值了,instanceOf 一下就知道类型了),或者是熟悉变量实际类型的人。

python 3.5 开始提供了类型注解支持 来让 ide 可以推断出实际的变量类型。你这种类似字典取值的写法,实际内部调用的是 __getitem__ 这个魔法函数,要做到类型提示的话,可以试试自己想办法重写 wb 这种数据类型里的这个魔法函数,加上类型注解支持。

图二能通过.给出提示,是因为你的 wk 变量是直接由库函数返回的,ide 可以精确知道 wk 变量的类型,所以能给出它包含的各种方法。
图一之所以不能.出来,是因为 sheet 变量是 wb 字典变量的某一个值,ide 不知道你这个 wb['login'] 到底是个啥玩意儿,它可能是一个字符串,可能是一个 int,无从猜测,取决于你的实际数据(也就是 wb['login'] 是啥只有你自己知道),所以无法提供任何方法名称。

啊神 关闭了讨论 06月24日 13:47
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册