0

エントリの重複を許可しないクラスを作成しようとしています

class QSet(list):
    def __init__(self,*args):
        super(QSet, self).__init__(args[0])
        self=list(set(self))  

クラスの重複エントリをテストしようとすると、削除されません

d=["a","b","a","z","a"]
z=QList(d)       

print d  
print z

これを解決するための提案ありがとう

4

4 に答える 4

4

コードを少し変更するだけで、やりたいことを実行できます。

class QSet(list):
    def __init__(self, a):
        super(QSet, self).__init__(list(set(a)))

任意の引数を受け入れるのは奇妙なので、コンストラクターの引数の使用方法を変更しましたが、少なくとも1つあると主張し、残りはすべて無視します。

于 2012-12-13T19:01:07.203 に答える
3

再割り当てselfは、実際にはオブジェクトを変更しません (識別子selfを新しいオブジェクトに再バインドしているだけです)。行を次のように変更できます。

    self[:] = list(set(self))  
于 2012-12-13T19:00:25.607 に答える
0

そのためのクラスが既に Python に用意されています。セットといいます

d=["a","b","a","z","a"]
z=set(d)       

print d  
print z

これはうまくいきますか?

于 2012-12-13T19:04:57.740 に答える
0

setそれがまさにあなたが構築しているクラスであることを知っていますよね?

>>> s = set([1,2,3,3,3])
>>> s.add(4)
>>> s
set([1, 2, 3, 4])
>>> s.add(4)
>>> s
set([1, 2, 3, 4])
于 2012-12-13T19:03:19.217 に答える