扩展 collections.namedtuple 是否有效?

2023-12-24

我想用类似的东西collections.namedtuple,它很好地强制了不变性并促进了简单的值类,但它不允许子类化;例如我想做类似下面的事情添加额外的只读属性 https://stackoverflow.com/questions/2193009/extend-python-namedtuple-with-many-properties:

from collections import namedtuple

class Foo(namedtuple('Foo','foo')):
   @property
   def antifoo(self):
     return -self.foo

class Bar(Foo):
   """ ARGH: somehow we add a 'bar' field """
   @property
   def inversebar(self):
     return 1.0/bar

唯一的问题是没有添加额外属性的机制。所以我查看了结果collections.namedtuple('Test','foo bar baz', verbose=True)并根据我自己的目的对其进行了调整:

from collections import OrderedDict
from operator import itemgetter as _itemgetter

class Foo(tuple):
    __slots__ = ()
    _fields = ('foo',)
    _nargs = 1
    _repr_format = '(foo=%r)'
    foo = property(_itemgetter(0), doc='Alias for field number 0')

    def __new__(_cls, foo):
        return tuple.__new__(_cls, (foo,))
    @classmethod
    def _make(cls, iterable, new=tuple.__new__, len=len):
        'Make a new Foo object from a sequence or iterable'
        result = new(cls, iterable)
        if len(result) != cls._nargs:
            raise TypeError('Expected 1 argument, got %d' % len(result))
        return result

    def _replace(self, **kwds):
        'Return a new {typename} object replacing specified fields with new values'
        result = self._make(map(kwds.pop, self._fields, self))
        if kwds:
            raise ValueError('Got unexpected field names: %r' % kwds.keys())
        return result

    def __repr__(self):
        'Return a nicely formatted representation string'
        return self.__class__.__name__ + self._repr_format % self

    def _asdict(self):
        'Return a new OrderedDict which maps field names to their values.'
        return OrderedDict(zip(self._fields, self))

    __dict__ = property(_asdict)

    def __getstate__(self):
        'Exclude the OrderedDict from pickling'
        pass

    @property
    def antifoo(self):
        return -self.foo

class Bar(Foo):
    _fields = ('foo','bar')
    _nargs = 2
    _repr_format = '(foo=%r, bar=%r)'
    bar = property(_itemgetter(1), doc='Alias for field number 1')

    def __new__(_cls, foo, bar):
        return tuple.__new__(_cls, (foo, bar))

    @property
    def inversebar(self):
        return 1.0/self.bar

This seems正常工作,但是可以吗,还是我犯了一个严重的错误?


None

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

扩展 collections.namedtuple 是否有效? 的相关文章

随机推荐

  • 计算 UTF8 字符串的 MD5 哈希值

    我有一个 SQL 表 其中存储必须是唯一的大字符串值 为了确保唯一性 我在列上有一个唯一索引 在其中存储大字符串的 MD5 哈希值的字符串表示形式 保存这些记录的 C 应用程序使用以下方法进行哈希处理 public static strin
  • 使用 Swift 发送 HTML 电子邮件

    我想使用 Swift 从我的应用程序发送一封自动生成的带有 HTML 正文的电子邮件 这是我当前的代码 message Swift Message newInstance gt setFrom array email protected c
  • Kotlin 协程 `runBlocking`

    我正在学习 Kotlin 协程 我读过runBlocking是桥接同步和异步代码的方式 但如果runBlocking停止 UI 线程 例如 我需要在Android中查询数据库 val result Int get runBlocking q
  • 使用 Cython 包装 Windows 标准 API

    我想使用 cython 编写一个使用一些标准 Windows API 的扩展 作为第一步 我阅读了Windows 和宽字符 API http docs cython org en latest src tutorial strings ht
  • 将字符串拆分为具有多个单词边界定界符的单词

    我认为我想做的是一项相当常见的任务 但我在网上没有找到任何参考 我有带标点符号的文本 我想要一个单词列表 Hey you what are you doing here 应该 hey you what are you doing here
  • 等待大文件在 Excel 中打开

    我一直在尝试在 VBA 中循环处理一堆大的 csv 文件 每个大约 50MB 在每次迭代中 我都会打开一个新的 CSV 来操作数据 但是当 csv 打开时 会出现一条下载消息 指出文件正在打开 并且在 VBA 等待其完成时 进度条总是卡在某
  • 是否有更高级的 C# 控制台库? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何 NET 库可以 输出彩色字符 单词 在控制台中绘制进度条等内容 类似于 wget 我可能会
  • $project MongoDB 中的 $filter 使用 Spring Data

    我有一个子文档 它是父文档的数组 设备 在该数组中 我有一个属性 它是日期属性 我想按确定的日期找到包含子子文档的父文档 如下所示 id ObjectId 5818fa596969a1339093a7da fecha ISODate 201
  • malloc() 和 malloc_consolidate() 中的段错误

    当我查看 gdb 中的回溯时 我的应用程序有时会出现段错误 主要是在 malloc 和 malloc consolidate 中 我确认机器有足够的可用内存 它甚至没有开始交换 我检查了数据段和最大内存大小的 ulimit 两者都设置为 无
  • Android 字母部分列表视图,如联系人应用程序列表视图

    现在谁能帮我看看我的观点是这样的 请帮助我 我太混乱了 这是我的代码 电话簿列表视图 xml
  • 如何将本地角色与从 ansible-galaxy 加载的角色分开?

    我观察到从 Galaxy 下载的角色安装在roles 目录 我们已经有内部目录 因此很难区分外部目录和内部目录 有没有办法将它们保存在单独的目录中 这样我们就可以避免混淆 在大多数情况下 我希望有一个更新银河系脚本的脚本 并且我们不会在内部
  • Django表单错误列表渲染位置

    当我使用 f as p 显示有错误的表单时 错误列表 ul 始终首先出现 然后是标签和输入字段 例如 ul class errorlist li This field is required li ul p p
  • 如何将所有图像转换为 jpg?

    我有脚本
  • 使用 nltk.download() 下载错误

    我正在使用 Python 试验 NLTK 包 我尝试使用下载NLTKnltk download 我收到这样的错误消息 如何解决这个问题呢 谢谢 我使用的系统是VMware下安装的Ubuntu IDE是Spyder 使用后nltk downl
  • .NET Core 依赖注入 -> 获取接口的所有实现

    我有一个名为IRule以及实现该接口的多个类 我想使用 NET Core 依赖注入容器来加载所有实现IRule 所以所有的规则都被执行了 不幸的是我无法完成这项工作 我知道我可以注射IEnumerable
  • CORBA 与 Web 服务

    为什么 WebServices 比 CORBA 更具优势 我怀疑一切都是从防火墙问题开始的 CORBA 请求是二进制的 正常工作需要多个随机端口 因此 CORBA 请求和响应在第一次出现时会被防火墙阻止 HTTP 和 FTP 也使用虚拟端口
  • 在文本框中包含按钮

    我想补充一点Button 这会删除中的所有文本TextBox 是否可以将此 删除 按钮放入文本框中 就像在iPhone 文本框 我希望在你的帮助后它看起来像这样 我用控制模板玩了一些东西 但没有得到想要的结果 解决此问题的一种方法可能是使用
  • 如何管理多个 grails/groovy 版本的开发?

    我有一个使用 groovy 1 7 5 和 grails 1 3 4 的项目 但我的新项目尚未启动 它将使用最新版本的 groovy 1 8 6 和 grails 2 0 4 我将在这两个项目中工作 那么如何在Windows环境下管理不同版
  • 无法将带有 ACL 公共读取的文件上传到 Digital Ocean 空间

    我正在尝试从浏览器将图像上传到数字海洋空间 这些图像应该是公开的 我能够成功上传图像 然而 尽管 ACL 设置为public read 上传的文件始终是私有的 我知道它们是私有的 因为 a 仪表板显示权限是 私有 b 因为公共 URL 不起
  • 扩展 collections.namedtuple 是否有效?

    我想用类似的东西collections namedtuple 它很好地强制了不变性并促进了简单的值类 但它不允许子类化 例如我想做类似下面的事情添加额外的只读属性 https stackoverflow com questions 2193