You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何两个namedtuple相加会返回普通tuple?

关于namedtuple加法返回tuple的解释

首先要明确:namedtuple本质是tuple的子类,它继承了tuple的所有内置方法,包括加法(__add__)操作。

tuple的加法逻辑是:将两个tuple对象拼接后,返回一个新的tuple实例——这个行为是tuple类型本身定义的,namedtuple并没有重写__add__方法,所以直接沿用了父类的逻辑。

回到你的代码例子:

from collections import namedtuple

foo_a = namedtuple("foo_a", ["a1", "a2", "a3"])
foo_b = namedtuple("foo_b", ["b1", "b2", "b3"])

a = foo_a(1, 2, 3)
b = foo_b(4, 5, 6)

a + b        # -> (1, 2, 3, 4, 5, 6)
type(a + b)  # -> tuple

哪怕是两个同类型的namedtuple实例相加,结果依然是tuple,比如:

a1 = foo_a(1,2,3)
a2 = foo_a(4,5,6)
print(type(a1 + a2))  # <class 'tuple'>

为什么namedtuple不重写加法来返回自身类型?原因很简单:

  • 若两个不同类型的namedtuple相加,无法确定返回哪个子类的实例;
  • 即使是同类型,拼接后的字段数量和原namedtuple的字段定义不匹配(原foo_a只有3个字段,拼接后有6个),无法构造合法的namedtuple实例。

这种行为是合理的,只是因为namedtuple的文档重点在它的命名字段特性,没有特意强调继承自tuple的基础操作行为。

内容的提问来源于stack exchange,提问作者sbwcwso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:52:06