1

如何在 load() 命令返回类对象的类中提醒 python pickle.load() 命令的返回类型。

我曾希望直截了当

class myClass:

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

会工作,但 python 抱怨 myClass 没有定义。

我想让 python 知道代码完成的类类型等。

4

1 回答 1

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
于 2018-02-11T19:26:00.120 回答