PyCharm是否支持全局变量的类型提示?

时间:2016-04-13 23:17:34

标签: python pycharm type-hinting

我已尝试在python_stub中设置我的全局,如下所示:

#Inside MyModule.pyi
global MY_GLOBAL #type: list[MyClass]

但是,当我尝试在主.py文件中索引到我的全局列表时,这似乎不起作用:

#Back inside MyModule.py
MY_GLOBAL[0].xyz #<-- Expecting type hinting to pop up after the '.'

另外,我已尝试在没有python_stub文件的情况下执行此操作,如下所示:

#Inside MyModule.py
MY_GLOBAL #type: list[MyClass]

#Still in the global scope here
MY_GLOBAL[0].xyz #<-- Type hinting works here!

当我这样做(在本地设置类型)时,它识别全局范围中的类型,但是,一旦我尝试在函数范围中使用global,它就会忘记类型:

#Inside MyModule.py
MY_GLOBAL #type: list[MyClass]

#Still in the global scope here
MY_GLOBAL[0].xyz #<-- Type hinting works here!

def MyFunction():
    global MY_GLOBAL
    MY_GLOBAL[0].xyz #<-- Expecting type hinting to pop up after the '.'

有谁知道是否支持此行为?我正在使用PyCharm 5.0社区版。

1 个答案:

答案 0 :(得分:2)

这不是类型提示的问题。问题是你实际上根本没有MY_GLOBAL变量。

global MY_GLOBAL不是你创建全局变量的方式。在Python中,没有像真正的全局变量那样的东西。您创建模块级全局变量的方式与创建局部变量的方式相同:

MY_GLOBAL = []

但是在模块级而不是在函数内。如果要从其他模块访问它,则需要导入模块并使用点分访问表示法:

import whichever_module_defined_the_global as m

m.MY_GLOBAL.append(3)

尝试使用from导入导入它会导致奇怪的问题,所以不要这样做。

*除了maxopen等内容。