0

我正在构建一个类,它有一个字典,其中包含多个列表以及其他变量。我希望使用该类的人能够将项目添加到列表中,但我想通过一个 setter 方法来确保他们添加到列表中的值是有效的。getter 方法为用户提供了更多便利,因此无需键入 variable.dictionary['value']['subvalue']['third nested thing'] 来获取一个值。

我有一些可行的方法,但是当您使用等于运算符时会调用 setter 方法。我想知道是否可以在调用 += 时调用 setter 方法,因为用户将添加到列表中。这似乎更自然。

这是我到目前为止所做的一些伪代码

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

创建一个临时集合只是为了将其用于一次性成员资格测试没有多大意义。还不如对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 回答