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

How to use type hinting in Python when loading objects

如何在 class 中提醒 python return 类型的 pickle.load() 命令,其中 load() 命令 returns class.

的对象

我希望直截了当

class myClass:

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

可以,但是 python 抱怨 myClass 没有定义。

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

你可能知道,在你定义classmethod的时候,myClass还不存在,所以你不能直接引用它。

指定的替代方法是使用对象的字符串表示形式。它并不完美,但归根结底,类型提示并不是一种严格的执行方式;这只是一个非正式的提示。

来自PEP 484

When a type hint contains names that have not been defined yet, that definition may be expressed as a string literal, to be resolved later.

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