gpt4 book ai didi

python - 通过子类化修改命名元组的构造函数参数?

转载 作者:IT老高 更新时间:2023-10-28 21:10:18 25 4
gpt4 key购买 nike

我想创建一个 namedtuple 来表示短位域中的各个标志。我正在尝试对其进行子类化,以便在创建元组之前解压缩位域。但是,我目前的尝试不起作用:

class Status(collections.namedtuple("Status", "started checking start_after_check checked error paused queued loaded")):
__slots__ = ()

def __new__(cls, status):
super(cls).__new__(cls, status & 1, status & 2, status & 4, status & 8, status & 16, status & 32, status & 64, status & 128)

现在,我对 super() 的经验是有限的,而我对 __new__ 的经验几乎不存在,所以我不太确定该怎么做(对我来说)神秘错误 TypeError: super.__new__(Status): Status is not a subtype of super。谷歌搜索和挖掘文档并没有产生任何启发性。

帮助?

最佳答案

你差点搞定了 :-) 只有两个小更正:

  1. new 方法需要一个return 语句
  2. super 调用应该有两个参数,clsStatus

生成的代码如下所示:

import collections

class Status(collections.namedtuple("Status", "started checking start_after_check checked error paused queued loaded")):
__slots__ = ()

def __new__(cls, status):
return super(cls, Status).__new__(cls, status & 1, status & 2, status & 4, status & 8, status & 16, status & 32, status & 64, status & 128)

它运行干净,就像你所期望的那样:

>>> print Status(47)
Status(started=1, checking=2, start_after_check=4, checked=8, error=0, paused=32, queued=0, loaded=0)

关于python - 通过子类化修改命名元组的构造函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3474118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com