当前位置: 首页 > 知识库问答 >
问题:

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

濮阳钟展
2023-03-14

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

我本来希望这是直截了当的

class myClass:

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

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

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

共有1个答案

章景同
2023-03-14

您可能知道,在定义类方法时,myClass还不存在,因此不能直接引用它。

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

从政治公众人物484:

当类型提示包含尚未定义的名称时,该定义可以表示为字符串文本,稍后进行解析。

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

事实上,在政治公众人物中有一个与你非常相似的例子:

class Tree:
    def __init__(self, left: 'Tree', right: 'Tree'):
        self.left = left
        self.right = right
 类似资料:
  • 问题内容: 我注意到python 3.5和python 3.6添加了许多有关静态类型检查的功能,因此我尝试使用以下代码(在python 3.6中为稳定版本)。 令我惊讶的是,尽管python附加到仅包含字符串的,但它却没有给我错误或警告。检测到类型错误并向我发出警告,但是它不明显,并且未在输出控制台中显示,我担心有时可能会错过它。我想要以下效果: 如果很明显如上所述我使用了错误的类型,请抛出警告或

  • 问题内容: 基本上我想这样做: 我试过了: 而且没有用。 另外,其他类型呢?例如,我无法复制。 问题答案: 就您而言,将返回。 您可能还需要阅读以下内容:http : //www.canonical.org/~kragen/isinstance/

  • 我在我们公司做项目,我有一个注入对象的问题。让我们考虑一下我有这个实体提供商: 并使用上面的实体提供程序扩展JPAContainer 问题是(我理解),我无法使用类类型定义@Inject对象,因为Inject方法需要一个空构造函数。这里有什么解决方案吗?如何让它发挥作用?现在我得到了一个例外 非常感谢您的回答:)Ondrej

  • 我们在基于sbt的项目中有多个项目(如下所示),并探索如何在运行时从scala对象中获得应用程序jar名称,例如“project1-v1.jar”。 使用“SBT Assembly”为每个项目创建单独的jar。

  • 问题内容: 如果我有这样的功能: 我想在参数中添加类型提示,该怎么做?我假设的方式给了我一个语法错误: 以下代码不会引发语法错误,但似乎不是处理这种情况的直观方法: 我在文档或Google搜索中找不到任何内容。 编辑:我不知道默认参数如何在Python中工作,但出于这个问题,我将保留上面的示例。通常,最好执行以下操作: 问题答案: 您的第二种方法是正确的。 这个输出 的确,它没有在PEP 484中

  • 我正在使用泛型在python中创建一个List类(类似于java列表的列表)。类节点也是通用的,我正在为上一个和下一个节点创建 getter 和 setters 方法。我想知道如何返回像类节点本身这样的类型?这是我的进步: 我试过 但它给了我错误