我正在构建一个类,其中包含一个包含多个列表以及其他变量的字典。我希望使用该类的人能够将项添加到列表中,但我想通过一个setter方法,以便我可以确保它们添加到列表中的值是有效的。 getter方法更方便用户使用,因此无需输入variable.dictionary ['value'] ['subvalue'] ['third nested thing']来获取值。
我有一些有用的东西,但是当你使用equals运算符时会调用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)
答案 0 :(得分: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
返回列表的包装版本。组合或子类化都可以使用