Python 用于列表和+;=操作人员

Python 用于列表和+;=操作人员,python,getter-setter,Python,Getter Setter,我正在构建一个类,它有一个字典,包含几个列表和其他变量。我希望使用该类的人能够将项添加到列表中,但我希望使用setter方法,以便确保他们添加到列表中的值是有效的。getter方法更方便用户,因此无需键入variable.dictionary['value']['subvalue']['third nested thing']来获取值 我有一些方法可以工作,但是当您使用equals操作符时,会调用setter方法。我想知道在调用+=时是否可以调用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)

创建一个临时集仅仅用于一次过的成员资格测试没有多大意义。最好只进行
列表的线性搜索

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

在我看来,如果你创建了几个简单的对象并使用组合,一切看起来都会更容易阅读。这很棘手,因为
a+=b
似乎应该具有与
a=a+b
相同的行为,但实际上它没有;它在适当的位置修改列表,如
a.extend(b)
。我不知道你是否可以不用子类化
list
就解决这个问题。顺便说一下,你可以一直使用字典,而不必使用
defaultdict
从集合导入defaultdict
def make_infinite_dict():
返回defaultdict(make_infinite_dict)
my_infinite_dict=make_infinite_dict()
Juan:我不太确定如何做你所描述的事情。你愿意模拟一些伪代码来告诉我你的意思吗?