typing.NamedTuple.__eq__是否具备合理的内置实现?
typing.NamedTuple.eq 的内置实现说明
typing.NamedTuple 确实存在合理的内置__eq__实现,这个行为源自它的底层本质——用typing.NamedTuple定义的类是标准库tuple的子类,因此继承了元组的相等性比较逻辑。
它的比较规则很明确:两个NamedTuple实例会按顺序逐一比较所有字段的值,只有当所有对应字段的值都相等时,实例才被判定为相等,就像你提供的示例展示的那样:属性完全一致的实例返回True,任意字段值不同则返回False。
尽管官方文档没有单独针对__eq__做专门说明,但这个特性是基于其元组子类身份的自然继承,属于预期行为。
验证代码示例:
Python 3.10.6 (main, Aug 10 2022, 11:19:32) [GCC 12.1.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from typing import NamedTuple >>> class Foo(NamedTuple): ... bar: int ... baz: str ... >>> foobar1 = Foo(1, "bar") >>> foobar2 = Foo(1, "bar") >>> foobar3 = Foo(2, "bar") >>> foobar1 == foobar2 True >>> foobar1 == foobar3 False
内容的提问来源于stack exchange,提问作者user7018565
相关产品推荐
相关产品推荐

