python - 类可以继承namedtuple的属性吗?

标签 python namedtuple

我有一个命名元组。

import collections

MyNamedTuple = collections.namedtuple('MyNamedTuple', 'prop1 prop2 foo bar')

我想定义一个可以由这些命名元组初始化的类。

class MyClass():
    def __init__(self, t):
        self.prop1 = t.prop1
        self.prop2 = t.prop2
        self.foo = t.foo
        self.bar = t.bar

MyNamedTuple 越大,定义 MyClass 所需的输入就越多,所以我很好奇是否有更有效的方法来定义 MyClass.

最佳答案

你有几个选项...namedtuple返回一个类——你可以直接子类化它:

class MyClass(MyNamedTuple):
    ...

当然,这意味着 MyClass 一个元组,这可能并不理想......

您还可以使用_fields nametuple 的属性(已记录 - 前导下划线是为了防止属性名称冲突,而不是表明它是“私有(private)”成员)...

def __init__(self, t):
    for field in t._fields:
        setattr(self, field, getattr(t, field))

当然,这种通过内省(introspection)进行的设置并不总是最容易阅读的内容(并且可能会导致虚假的 linter 警告)...

否则,没有一个真正好的方法可以让 linter 满意并且拥有非常短的代码,将它们全部写出来可能是您的最佳选择。如果预计命名元组中的字段数量将来会发生变化,我建议您进行一个单元测试,根据MyNamedTuple检查新创建的MyClass用于创建它的 code> 以确保设置了 MyNamedTuple 的所有属性。您可以(并且可能应该)使用_fields的内省(introspection)来执行此检查。

关于python - 类可以继承namedtuple的属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37666557/

相关文章:

python - Python 中 NumPy 或 SciPy 中 Wolfram Mathematica 的模拟函数

Python - 列表和字典键之间的交集

python - 如何在 python 文件处理中从 namedtuple 中提取数据

python - 为什么fastapi在添加打印HTTP请求体的中间件时会挂起?

python - 如何在sqlalchemy中创建子查询

Python:打开(文件名, 'w')用于不存在的文件

Python:将具有unicode of namedtuple的字符串形式转换为namedtuple

python - 如何将字段添加到 namedtuple?

python - 从列表创建命名元组

python - 如何将 namedtuple 应用于函数?