如何在加载对象时在Python中使用类型提示

时间:2018-02-11 19:16:03

标签: python pickle type-hinting code-hinting

如何在一个类中调用pickle.load()命令的返回类型的python,其中load()命令返回该类的对象。

我曾希望直截了当的

class myClass:

    @classmethod
    def load(cls, filename) -> myClass:
        with open(filename,'rb') as f:
            return pickle.load(f)

会起作用,但是python抱怨myClass没有定义。

我希望python知道代码完成的类类型等。

1 个答案:

答案 0 :(得分:2)

您可能已经意识到,在您定义类方法时,myClass尚不存在,因此您无法直接引用它。

规定的替代方法是使用对象的字符串表示。它并不完美,但在一天结束时,提示并不是一种严格的执法手段;它只是一个非正式的暗示。

来自PEP 484

  

当类型提示包含尚未定义的名称时,即   定义可以表示为字符串文字,稍后要解决。

class myClass:
    @classmethod
    def load(cls, filename) -> 'myClass':
        with open(filename,'rb') as f:
            return pickle.load(f)

事实上,有一个与你的PEP非常相似的例子:

class Tree:
    def __init__(self, left: 'Tree', right: 'Tree'):
        self.left = left
        self.right = right