Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.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_Class_Pycharm - Fatal编程技术网

Python 将某个类的对象定义为“无”

Python 将某个类的对象定义为“无”,python,class,pycharm,Python,Class,Pycharm,对象在初始化时是否可以设置为“无”,但仍然属于类 class Foo: def do_stuff(): pass bar_1 = Foo() bar_2 = None 我想到的具体目的是,我希望bar_2可以在不同的模块中使用,但由于不相关的原因,在以后定义它。当您运行代码时,它工作得很好。然而,我的IDE不知道bar_2是Foo类型的,因此不会像bar_1那样将do_内容显示为自动完成选项 我知道python不是强类型语言,但我认为如果有办法告诉python bar

对象在初始化时是否可以设置为“无”,但仍然属于类

class Foo:
    def do_stuff():
        pass

bar_1 = Foo()
bar_2 = None
我想到的具体目的是,我希望bar_2可以在不同的模块中使用,但由于不相关的原因,在以后定义它。当您运行代码时,它工作得很好。然而,我的IDE不知道bar_2是Foo类型的,因此不会像bar_1那样将do_内容显示为自动完成选项

我知道python不是强类型语言,但我认为如果有办法告诉python bar_2是Foo类型的,它将解决自动完成不显示的问题


如果有其他方法可以让我的IDE PyCharm,特别是了解bar_2的类,我很乐意知道。

当它应该是foo的一个实例时,您可以这样做

assert isinstance(bar_2,Foo)
# anything below this and in scope will autocomplete bar_2 with Foo's methods
一般来说,这不是一个很好的实践,应该避免,但它可以在大多数IDE的pycharm中启用自动完成功能,包括

尝试使用,假设类型是一致的,并且您使用的是python 3.5


要获得intellisense完成,JetBrains有一个提示系统,该系统应适用于所有版本的python。

如果您使用的是python 3.5,则可以使用类型提示。对于此特定用途,您需要将其放入:


Python的早期版本没有内置的方法来实现这一点,尽管我认为支持早期和后期版本的IDE可能允许类型注释影响其行为,即使您使用的Python版本不支持完整的类型暗示语义。

bar2应该是什么?在您当前的代码中,bar_2不是Foo类型。如果您希望它是Foo,那么需要将其定义为Foo。如果您需要延迟初始化,请创建一个除uu init uu_uu之外的方法来执行您希望延迟的操作,然后在准备就绪时调用它。回答不错:虽然他使用python3.5的可能性很小,但我不知道传统类型的暗示内容,学习新内容总是很酷的
bar_2 = None # type: Foo