Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python全局无对象提示_Python_Object_Pycharm - Fatal编程技术网

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
,而是会识别这一点。非常好!我喜欢这个解决方案,因为我不需要导入任何内容。