导致 ValueError: 'b' in __slots__ 与类变量冲突的数据类和槽

2024-04-21

我不明白错误消息,也找不到其他问题和答案来帮助我理解这一点。 MWE 使用 Python 3.9.2 进行测试。我知道有一个slots=TruePython 3.10 数据类中的参数。但这不是这里的选择。

错误输出:

Traceback (most recent call last):
  File "/home/user/dc.py", line 6, in <module>
    class Foo:
ValueError: 'b' in __slots__ conflicts with class variable

为什么会发生这种情况?我什至不明白该错误的背景。

#!/usr/bin/env pyhton3
from dataclasses import dataclass, field


@dataclass(init=False)
class Foo:
    __slots__ = ('a', 'b')
    a: int
    b: list[str] = field(init=False)

    def __init__(self, a, ccc):
        self.a = a

        # b = _some_fancy_modifications(ccc)

        self.b = b


if __name__ == '__main__':
    f = Foo(1, list('bar'))

会员b没有作为参数给出__init__()但根据参数计算ccc。因此我认为我需要自己写一个__init__() (@dataclass(init=False))和b成员不应由数据类初始化(field(init=False))。也许我在这里误解了什么?


For __slots__为了工作,Python 必须插入特殊的描述符 https://docs.python.org/3/reference/datamodel.html#implementing-descriptors对象放入类字典中以管理属性访问。否则,由于属性不存储在实例字典中,属性查找将完全无法找到您的属性。描述符告诉属性查找机制如何查找特殊属性。

For the b要工作,Python 必须为该属性插入一个描述符,该描述符对应于'b'输入你的班级字典。但你已经在那里放了一些东西:field您创建的对象。你不能有一个field object and槽描述符作为同一键的值。 Python 认识到这是一个问题,并引发错误来告诉您需要对此采取措施。

这确实不是您可以解决的问题。__slots__对数据类的支持需要对数据类机制进行更改,这些更改发生在 3.10 中。在 3.9 中,您无法使用带有数据类的槽。

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

导致 ValueError: 'b' in __slots__ 与类变量冲突的数据类和槽 的相关文章

随机推荐

  • IntelliJ IDEA 中缺少“更新资源”选项

    我正在使用 tomcat 7 来开发 java web 应用程序 在调试模式下运行tomcat 我在 更新 菜单上没有 更新资源 和 更新类和资源 选项 只有 热插拔类 重新部署 和 重新启动服务器 请问你能帮忙找到他们吗 预先非常感谢 这
  • 玩框架。无需编译

    我被介绍到 Play 框架 我发现它的令人惊奇的事情之一是不需要编译项目 您只需保存编辑的文件并重新加载网页即可 我听说 Java 源代码被编译为字节码 然后使用 JIT 编译器进行编译 那么 Play 框架内部到底有什么魔力呢 在 DEV
  • MySQL:如何选择本周的记录?

    我有桌子temp结构上sqlfiddle http sqlfiddle com 2 cf1aa id int 11 primary key name varchar 100 name2 varchar 100 date datetime 我
  • 如何在Python 3.6中安装pymssql模块?

    我已经阅读了一些涉及 FreeTDS Wheel git 和 github 的文档 但在我的带有 Python 3 6 的 Windows 10 PC 上没有任何功能 但我需要安装它 我正在开发一个项目 我对已经安装在我的电脑中的 mssq
  • c# LOESS/LOWESS 回归 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您知道执行 LOESS LOWESS 回归的 net 库吗 最好是免费 开源 端口来自java htt
  • 从 Symfony2 中的实体和存储库登录的正确方法

    在 symfony2 架构中记录来自实体或存储库类的消息或错误的方法是什么 在 symfony1 中 您可以使用单例来杀死小狗 方法是执行以下操作以从任何地方获取记录器 sfContext getInstance gt getLogger
  • 如何在 Vapor 3/Fluent 中记录 SQL 语句?

    看起来在 Vapor 2 中你可以这样做 let query
  • 更改组织模式新一天开始的时间

    我使用组织模式来计时我的工作 有时我会工作几个小时到午夜 例如 我记录的时间从 2013 年 6 月 3 日晚上 10 点开始 到 2013 年 6 月 4 日凌晨 2 点结束 组织模式在凌晨 0 点进行划分 开始新的一天 但如果将 0am
  • Excel创建乘法条件排名

    我试图在此图表中进行有条件排名 On the right you can see the total score and ranking from the Match 1 2 3 sum on line A and C I have a t
  • 使用 Twitter Bootstrap 的水平形式内的普通(垂直)形式

    我想要一个在第一层具有水平布局的表单 但是在一行内可以有一个 内联 表单 我想要一个垂直 默认 布局 有没有一种简单的方法可以实现这一目标 Note form inline没有做我正在寻找的事情 因为它没有将内部标签放在输入的顶部 到目前为
  • Java 中是否有与 StringWriter 等效但内部带有 StringBuilder 的东西?

    我注意到 StringWriter 在内部使用 StringBuffer 但是 如果您不需要同步开销 是否有与 StringWriter 等效的内部使用 StringBuilder 的方法 如果你恰好使用 Apache Commons IO
  • 允许 Rust 格式中未使用的命名参数!() 系列

    Given format red reset text red RED blue BLUE reset RESET 编译器退出并出现错误 error named argument never used gt example rs 1 47
  • 提取后视频帧是颠倒的

    我的问题是 当我使用 opencv 将视频提取到帧中时 有时我得到的帧会翻转 这在我的机器 窗口 和 VM ubuntu 上都发生过 但是我测试的一些视频 帧不翻转 所以 我想知道应该在我的代码中更改 添加哪些因素或哪些内容 以使提取内容无
  • WebSocket 握手:意外响应代码:404

    正在编写我的第一个 websocket 程序并且正在得到 WebSocket 握手 意外响应代码 404 加载网页时出错 我使用的是 JDK 1 7 和 jboss 8 wildfly8 0 有人可以帮忙吗 window onload in
  • 通过代码更改 Vaadin 7 中的主题

    我正在 Vaadin 7 中做一个项目 我需要更改页面的主题 在 Vaadin 6 中 有一个名为 setTheme 的函数 这样我就可以在代码中的任何位置使用该函数更改主题 但是 在 Vaadin 7 中 我找不到类似的东西 我知道会有办
  • SLES Apache Solr start.jar,无法访问 jarfile

    我在启动 Apache Solr 搜索时遇到一些问题 在我的 SLES 11 64 位服务器上安装 java 7 后 我将 solr 3 6 1 解压到 srv apache solr 3 6 0 之后我想启动该软件 但是当我尝试时 jav
  • 如何解决此错误消息:错误:virtualenvwrapper 无法在路径中找到 virtualenv?

    我正在尝试在 Mac 上安装 Python Goose 我运行的是 OSX 10 9 3 安装 Goose 的第一步是 mkvirtualenv no site packages goose 但是 当我运行此命令时 我收到以下错误消息 错误
  • Xcode在哪里打开快速搜索?

    我不知道如何让它索引我的项目文件 快速打开应该搜索任何open项目 曾经有一个路径首选项 但我相信它在 3 1 中被删除了
  • 交换数组中的奇数和偶数

    我在这个网站上看到了这段代码 它使用一种方法对数组进行排序 偶数在前面 奇数在数组后面 我想知道你是否可以做同样的事情 除了先出现奇数 然后出现偶数 我尝试过但没有成功 我是java编码新手 我想测试递归 public class Recu
  • 导致 ValueError: 'b' in __slots__ 与类变量冲突的数据类和槽

    我不明白错误消息 也找不到其他问题和答案来帮助我理解这一点 MWE 使用 Python 3 9 2 进行测试 我知道有一个slots TruePython 3 10 数据类中的参数 但这不是这里的选择 错误输出 Traceback most