将某个类的对象定义为None

时间:2016-03-24 19:09:11

标签: python class pycharm

初始化时,对象是否可以设置为None,但仍属于某个类?

class Foo:
    def do_stuff():
        pass

bar_1 = Foo()
bar_2 = None

我想到的具体目的是我希望bar_2可以在不同的模块中使用,但是可以在以后定义它(出于不相关的原因)。当你运行代码时,它工作得很好。但是,我的IDE不知道bar_2属于Foo类型,因此不会像do_stuff()那样向我显示bar_1作为自动完成选项,实例

我知道python不是一种强类型语言,但我想如果有一种方法可以告诉python bar_2类型为Foo,它可以解决自动完成不显示的问题

如果有另一种方法让我的IDE(特别是PyCharm)了解bar_2的课程,我很高兴知道。

3 个答案:

答案 0 :(得分:1)

尝试使用type hints,假设类型一致并且您正在使用python 3.5。

为了获得智能感知功能,JetBrains有一个legacy type提示系统,适用于所有版本的python。

答案 1 :(得分:1)

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

bar_2 = None # type: Foo

早期版本的Python没有内置的方法来做到这一点,虽然我认为支持该语言的早期版本和更高版本的IDE可能允许类型注释影响它的行为,即使你正在使用的Python版本不支持完整类型提示语义。

答案 2 :(得分:0)

当它应该是foo的一个实例时,你可以做到

assert isinstance(bar_2,Foo)
# anything below this and in scope will autocomplete bar_2 with Foo's methods

一般来说,这不是一个很好的做法,应该避免,但它可以在大多数 IDE(包括pycharm)中启用自动完成功能