2
>>> Employee = namedtuple("Employee", "name")
>>> Patient = namedtuple("Patient", "name")
>>> e = Employee("Mike")
>>> p = Patient("Mike")
>>> Counter([e, p])
Counter({Employee(name='Mike'): 2})

カウンターがnamedtupleの2つのクラスを区別しないのはなぜですか?

4

1 に答える 1

4

名前付きタプルは、名前が示すようにタプルです。それらは要素ごとに比較されます。両方のタプルが"Mike"最初の (そして唯一の) 要素であるため、それらは等しいです。それらが異なるクラスであることは問題ではありません。中身だけ比較。

比較してクラス自体を考慮したい場合は、独自のラッパー クラスを作成する必要があります。(単純な可能性の 1 つは、タプルの要素としてクラス名を含むラッパーを作成することです。そのため、employee-Mike は になり("Employee", "Mike")、patient-Mike は になります("Patient", "Mike")。)

于 2012-12-29T20:09:46.517 に答える