用于list和+ =运算符的python getter和setter方法

时间:2013-07-03 03:56:00

标签: python getter-setter

我正在构建一个类,其中包含一个包含多个列表以及其他变量的字典。我希望使用该类的人能够将项添加到列表中,但我想通过一个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)

1 个答案:

答案 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返回列表的包装版本。组合或子类化都可以使用