我已尝试在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社区版。
答案 0 :(得分:2)
这不是类型提示的问题。问题是你实际上根本没有MY_GLOBAL
变量。
global MY_GLOBAL
不是你创建全局变量的方式。在Python中,没有像真正的全局变量那样的东西。您创建模块级全局变量的方式与创建局部变量的方式相同:
MY_GLOBAL = []
但是在模块级而不是在函数内。如果要从其他模块访问它,则需要导入模块并使用点分访问表示法:
import whichever_module_defined_the_global as m
m.MY_GLOBAL.append(3)
尝试使用from
导入导入它会导致奇怪的问题,所以不要这样做。
*除了max
或open
等内容。