如何输入最初为 None 但保证获得值的提示变量

2023-11-24

我有一个类变量,如下所示:

class MyClass:
    def __init__(self):
        self.value: MyOtherClass | None = None
        self.initialize_value()

    def initialize_value(self):
        self.value = MyOtherClass()

    def use_value(self):
        return self.value.used

self.value保证被初始化为实例MyOtherClass在使用之前self.use_value();然而,它必须保持为None在构造函数中。这里的困境是如何正确地提示这种情况。

  • 如果我选择如上所示输入提示,我会得到一个error: Item "None" of "Optional[MyOtherClass]" has no attribute "used" [union-attr]
  • 如果我从构造函数中删除变量定义并将类型提示移至self.initialize_value(),我得到一个Instance attribute value defined outside __init__来自 Pylint 的错误

解决这个问题的最佳方法是什么?多谢!


为了避免重复,当在整个类的多个方法中使用这样的属性时,对我来说,一个常见的模式是保护它并定义一个引发错误的属性(如果未设置其背后的属性):

class MyClass:
    def __init__(self):
        self._value: MyOtherClass | None = None
        self.initialize_value()

    @property
    def value(self) -> MyOtherClass:
        if self._value is None:
            raise AttributeError("...")
        return self._value

    def initialize_value(self):
        self._value = MyOtherClass()

    def use_value(self):
        return self.value.used

这也消除了类型检查器的歧义,因为属性的返回类型是always MyOtherClass.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何输入最初为 None 但保证获得值的提示变量 的相关文章

随机推荐

  • 如何使用 Three.js 获取鼠标位置?

    嗨 我正在使用Icosahedrongemetry 在那儿 我将每个顶点添加圆地测定法 因此 现在我的要求是 当鼠标向圆向圆移动时 圆应感知鼠标 并且应该向鼠标移动 因此 我在圆圈周围创建了一个铃声 因此 如果鼠标向环移动 则圆圈应感知鼠标
  • MVC 中的 P3P 标头信息

    我不确定应该将其放在我的 Asp net MVC 网站中的什么位置 HttpContext Current Response AppendHeader P3P CP IDC DSP COR ADM DEVi TAIi PSA PSD IVA
  • 承诺并订阅

    我有一个 Angular2 ionic2 应用程序 我有一个请求城市的函数 但收到一个错误 指出属性订阅不存在this cityService getAllCities cityPage ts 有一个这样的函数 getCities this
  • Python - PySpark 的 Pickle Spacy

    The Spacy 2 0 文档提到开发人员添加了允许对 Spacy 进行 pickle 的功能 以便它可以由 PySpark 接口的 Spark 集群使用 但是 他们没有给出如何执行此操作的说明 有人可以解释一下我如何pickle Spa
  • TabLayout中的Fragment仅在用户滑动Android时加载

    你好 我正在用 A 制作一个应用程序fragment和几个孩子fragment在里面使用tablayout and viewpager 问题全是我的孩子fragment from Tablayout 始终执行 每当用户单击父级时加载所有代码
  • if-let 还是普通 if 条件更好?

    例如 fn foo gt Option lt gt fn bar gt Option lt gt if let None foo lt here return None 然后我将 if 语句更改为 if None foo 而且它也有效 可以
  • 从 python 脚本启动节点应用程序

    是否可以从树莓派上的Python脚本中启动node js应用程序 在命令行上我运行sudo node myscript js 我可以使用像操作系统这样的库吗 文件的第一行应为 usr bin python 您可以使用以下命令调用命令子流程调
  • H2 SQL语法异常

    我正在尝试导入 H2 的 sql 脚本 该脚本由 spring batch 提供 用于存储作业元数据 当我直接在 H2 控制台中执行此脚本时 没有语法错误 但我在初始化阶段引用了 Hibernate JPA 中要导入的相同脚本 但出现了以下
  • 使用 Docker 和 Docker Compose 时,Cypress 无法验证该服务器是否正在运行

    我目前正在运行三个 docker 容器 用于前端 Web 应用程序的 Docker 容器 在端口 8080 上公开 后端服务器的 Docker 容器 在端口 5000 上公开 我的 MongoDB 数据库的 Docker 容器 所有三个容器
  • 当启用急切执行时,传递给 Optimizer.compute_gradients 的“loss”应该是一个函数

    我是 TensorFlow 的新手 刚刚开始学习和理解它 我正在研究neural style transfer问题 我正在使用张量流version 1 14 我收到错误当启用急切执行时 传递给 Optimizer compute gradi
  • AVMutableCompositionTrack - insertTimeRange - insertEmptyTimeRange 问题

    我有一个奇怪的问题 我想用两个声音文件和静音生成一个新的声音文件 声音1 2秒长 静音 2秒静音 声音2 2秒长 当我尝试下面的代码时 我得到了一个 6 秒长的声音文件 其中包含所有部分 但顺序不同 顺序是 声音1 声音2 静音 我无法将这
  • 动态创建并提交表单

    有办法进去吗jQuery即时创建并提交表单 像下面这样 Content Are
  • 函数局部 typedef 在 C++0x lambda 中是否可见?

    我遇到了一个奇怪的问题 以下简化代码重现了 MSVC 2010 中的问题 template
  • 在 Oracle 中定义局部变量的最简单方法是什么?

    在SQL Server中 我可以像这样定义局部变量 declare id number 1000 select from tbl A where id id select from tbl B where id id 非常方便 我尝试做同样
  • 为什么VPC中的AWS lambda函数有时会超时,有时会正常工作?

    我在 VPC 中有一些 lambda 函数 其中一些需要 Internet 才能工作 所以我添加了一个 NAT 实例 t2 micro 问题是我有一些函数有时可以工作 有时会超时 例如 调用 FB API 的函数 80 的时间工作 20 的
  • 在 Vim 中运行 Python 代码

    我正在使用 Vim 编写 Python 代码 每次我想运行代码时 我都会在 Vim 中输入以下内容 w python 这让人沮丧 所以我一直在寻找一种更快的方法来在 Vim 中运行 Python 代码 也许从终端执行 Python 脚本 我
  • 如何抑制 C# 中的 thread.abort() 错误?

    当我的程序加载时 我在后台线程上显示启动屏幕 一旦加载 我将中止线程 因为它的唯一目的是显示 正在加载 启动画面 我的问题是 当中止线程时 它会抛出ThreadAbortException用户只需单击 继续 即可 我该如何处理这个问题 我试
  • 从文本文件中获取非空白行的总数?

    我在用 File ReadLines file txt Count 查找文件中的总行数 我怎样才能做到这一点 但忽略所有空白行 您可以使用String IsNullOrWhiteSpace方法与Count File ReadLines fi
  • 在控制台中查看 TFS 变更集详细信息

    我正在使用 TFS 并且想要查看包含多个文件中的更改的变更集上的所有更改 在 GUI 中查看此内容效率不高 因为我必须打开每个文件 我想做的是告诉控制台上的 TFS 向我显示对变更集编号 777 中的所有文件的所有更改 是否有命令可以执行此
  • 如何输入最初为 None 但保证获得值的提示变量

    我有一个类变量 如下所示 class MyClass def init self self value MyOtherClass None None self initialize value def initialize value se