読者です 読者をやめる 読者になる 読者になる

pythonのnamedtupleについて見過ごしてきたこと

python

pythnonのcollectionsにnamedtupleがありますが。コレについて見過ごしてきたことがありました。以下のようなコードがTrueを返してしまいます。

from collections import namedtuple

Foo = namedtuple("Foo", "name value")
Bar = namedtuple("Bar", "name value")

foo = Foo("spam", 42)
bar = Bar("spam", 42)
print(foo == bar)  # => True

これは結局、namedtupleは名前の通りtupleでしかないせいです。tupleなので型名を持っていません。したがって、同じ順序で同じ値が渡されていたものは比較でTrueになるというわけです。

それでは、アクセス子として生成される名前も無意味なのでしょうか?

Foo = namedtuple("Foo", "name value")
Boo = namedtuple("Boo", "name point")

foo = Foo("spam", 42)
boo = Boo("spam", 42)
print(foo == boo)  # => True

その通りです。単に順序を持ったtupleという構造を名前付きで生成出来るだけだったのです。辛いですね。