私はcollections.Counterクラスのインスタンスを持っています。また、次のようなオブジェクトもあります。
p1 = Person(name='John')
p2 = Person(name='John')
p3 = Person(name='Jane')
同じ名前の人物オブジェクトは同じ人物カウントをインクリメントする必要があることを考慮して、Counterのインスタンスでこの人物オブジェクトのカウントを保持したいので、すべての人物オブジェクトのリストがある場合:
people = [p1, p2, p3]
そして、私はカウンターにそれを入力します:
c = Counter(people)
私は以下を取得したい:
c[p1] #prints 2
c[p2] #prints 2
c[p3] #prints 1
私の最初の試みは__eq__
、人物オブジェクトの新しいメソッドを実装することでした
def __eq__(self, other):
return self.name == other.name
カウンターオブジェクトは、次のように、キーオブジェクトの同等性に基づいてキーのカウントをインクリメントするように見えるため、これが機能する可能性があると思いました。
c = Counter(['A', 'A', 'B'])
c['A'] #prints 2
c['B'] #prints 1
別の試みは、Counterから継承し、Counterがオブジェクト間の同等性を測定するために使用する基本的なメソッドをオーバーライドする可能性があります。よくわかりませんが、Counterは__contains__
そのためのメソッドを使用すると思います。
私の質問は、継承を使用せずにこの動作を取得する方法があるかどうかです。そうでない場合、それを行うための最良の方法は何でしょうか。