0

他の変数とともにいくつかのリストを含む辞書を持つクラスを構築しています。クラスを使用している人がリストにアイテムを追加できるようにしたいのですが、リストに追加する値が有効であることを確認できるように、setter メソッドを使用したいと考えています。getter メソッドは、値を取得するためだけに variable.dictionary['value']['subvalue']['three nested thing'] と入力する必要がないように、ユーザーにとってより便利です。

動作するものがありますが、equals 演算子を使用するとセッター メソッドが呼び出されます。ユーザーがリストに追加するため、 += が呼び出されたときにセッターメソッドを呼び出すことができるかどうか疑問に思っていました。そのほうが自然に思えます。

ここに私がこれまでに行ったことのいくつかの擬似コードがあります

def addItemtoList(self,inValue):
    if inValue in listOfAcceptableValues:
        self.really['long']['nested']['dictionaries']['array'] = list( set( self.really['long']['nested']['dictionaries']['array'] + [inValue] ) )

def getDeeplyNestedList(self):
    return self.really['long']['nested']['dictionaries']['array']

thatList = property(getDeeplyNestedList, addItemtoList)
4

1 に答える 1

1

1 回限りのメンバーシップ テストに使用するためだけに一時的なセットを作成する意味はあまりありません。の線形検索だけでもかまいませんlist

def addItemtoList(self,inValue):
    L = self.really['long']['nested']['dictionaries']['array']
    if inValue in listOfAcceptableValues and inValue not in L:
        L.append(inValue)

誰かがリストを拡張しようとしたとき

foo.thatList += ['Some', 'items']

メソッドはlist.extendリストで呼び出されるため、addItemtoListはまったく関与しません。thatList目的を達成するには、リストのラップされたバージョンを返す必要があります。構成またはサブクラス化のいずれかが機能します

于 2013-07-03T04:46:41.197 に答える