Python 用于列表和+;=操作人员
我正在构建一个类,它有一个字典,包含几个列表和其他变量。我希望使用该类的人能够将项添加到列表中,但我希望使用setter方法,以便确保他们添加到列表中的值是有效的。getter方法更方便用户,因此无需键入variable.dictionary['value']['subvalue']['third nested thing']来获取值 我有一些方法可以工作,但是当您使用equals操作符时,会调用setter方法。我想知道在调用+=时是否可以调用setter方法,因为用户将添加到列表中。这似乎更自然 这是我到目前为止所做工作的一些伪代码Python 用于列表和+;=操作人员,python,getter-setter,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)
创建一个临时集仅仅用于一次过的成员资格测试没有多大意义。最好只进行
列表的线性搜索
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:我不太确定如何做你所描述的事情。你愿意模拟一些伪代码来告诉我你的意思吗?