>>> Employee = namedtuple("Employee", "name")
>>> Patient = namedtuple("Patient", "name")
>>> e = Employee("Mike")
>>> p = Patient("Mike")
>>> Counter([e, p])
Counter({Employee(name='Mike'): 2})
カウンターがnamedtupleの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つのクラスを区別しないのはなぜですか?
名前付きタプルは、名前が示すようにタプルです。それらは要素ごとに比較されます。両方のタプルが"Mike"
最初の (そして唯一の) 要素であるため、それらは等しいです。それらが異なるクラスであることは問題ではありません。中身だけ比較。
比較してクラス自体を考慮したい場合は、独自のラッパー クラスを作成する必要があります。(単純な可能性の 1 つは、タプルの要素としてクラス名を含むラッパーを作成することです。そのため、employee-Mike は になり("Employee", "Mike")
、patient-Mike は になります("Patient", "Mike")
。)