2

クラスがあります。

class Part:
    def __init__(self,name):
        self.name = name
        self.count = 0
    def __hash__(self):
        return hash(self.name)
    def __lt__(self,other):
        return self.count < other.count
    def __eq__(self,other):
        return self.name == self.count

これらのオブジェクトの束を作成し、リストにそれらを入力します。このリストには重複が含まれることになります。コードの1つのセグメントに必要ですが、出力するときは、各部分を1回だけ出力したいと思います。だから私はそれをセットに貼り付けます。

uniqueParts = set(parts)

次に、これを繰り返してファイルに書き込みます。

for part in uniqueParts:
    f.write(part.name+": "+str(part.count)+'\n')

これは動作しません。すべての複製を出力します。uniquePartsはセットであるため、セットが重複していることを認識できない私のクラスに問題があるはずです。

これで、特定の問題をいくつかの異なる方法で解決できます(クラスを書き直して、必要がないようにします(データは単純すぎて、独自のクラスに値するものではない可能性があります)。または、重複を繰り返して削除するか、コードを作り直して重複するようにします。そもそも発生することはありません)しかし、私はおそらく将来この問題に再び遭遇するでしょう、そして私は自分で書いたクラスでセットを動作させるために何をする必要があるか知りたいです。

考え/支援?

4

1 に答える 1

9

これは間違っているように見えます:

def __eq__(self,other):
    return self.name == self.count

多分あなたは意味しました:

def __eq__(self,other):
    return self.name == other.name
于 2012-11-21T14:58:47.263 に答える