python全局无对象提示
我有这个:python全局无对象提示,python,object,pycharm,Python,Object,Pycharm,我有这个: my_object = None def main(): global my_object my_object = MyObject() # do stuff with my_object if __name__ == "__main__": main() 我想在引用我的_对象时利用PyCharm的自动完成功能。 我知道如何执行此操作的唯一方法是在顶部对其进行初始化: my_object = MyObject() def main():
my_object = None
def main():
global my_object
my_object = MyObject()
# do stuff with my_object
if __name__ == "__main__":
main()
我想在引用我的_对象时利用PyCharm的自动完成功能。
我知道如何执行此操作的唯一方法是在顶部对其进行初始化:
my_object = MyObject()
def main():
global my_object
# do stuff with my_object
if __name__ == "__main__":
main()
问题是构造函数在调用它之前需要先初始化参数
欢迎提出任何建议 如果您希望它是全局的,并且希望它最初设置为
None
,那么变量的类型应该是可选的[MyObject]
:
from typing import Optional
my_object: Optional[MyObject] = None
def main():
global my_object
my_object = MyObject()
# do stuff with my_object
if __name__ == "__main__":
main()
Pycharm现在成功地自动完成my_对象的属性。如果您使用的是更严格的过梁(例如MyPy),那么在使用my_对象之前,您需要先执行如果myObject不是None
检查,以确保my_对象
不是None
,否则您会收到更多警告。Pycharm的linter实现非常松散,并且不关心可能包含None
的Optional
s注释全局名称而不为其赋值:
my_对象:MyObject
def main():
全局my_对象
我的对象=我的对象()
#用我的东西做东西
如果名称=“\uuuuu main\uuuuuuuu”:
main()
这静态地暗示my_对象
的类型总是MyObject
。没有任何中间值/类型分配给它
请注意,在运行时,名称my_object
未定义,除非指定给内部main
;在给出这样一个注释时,您有责任以这样一种方式构造代码,即my\u object
在使用前进行初始化。如果您在函数外部添加一个类型提示,如my\u object:MyObject
(PyCharm不会指定None
,而是会识别这一点。非常好!我喜欢这个解决方案,因为我不需要导入任何内容。