pythonのnamedtupleについて見過ごしてきたこと
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という構造を名前付きで生成出来るだけだったのです。辛いですね。