Я создаю класс, который имеет словарь, который содержит несколько списков вместе с другими переменными. Я хотел бы, чтобы люди, использующие класс, могли добавлять элементы в списки, но я хочу пройти метод setter, чтобы я мог убедиться, что значения, которые они добавляют в список, действительны. Метод getter более удобен для пользователя, так что не обязательно будет вводить значение переменной.dictionary ['value'] ['subvalue'] ['third inested thing'], чтобы получить значение.python getter и setter методы для списка и + = operator
У меня есть что-то, что работает, но метод setter вызывается, когда вы используете оператор equals. Мне было интересно, можно ли вызвать метод 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)
Мне кажется, что все будет намного проще и удобочитаемо, если вы создали несколько простых объектов и используете композицию. –
Это сложно, потому что 'a + = b' * кажется *, как будто он должен иметь такое же поведение, как' a = a + b', но на самом деле это не так; он изменяет список на месте, например 'a.extend (b)'. Я не знаю, можете ли вы обойти это без подкласса «list». – icktoofay
Кстати, вы можете иметь словари вплоть до того, как не писать собственный класс, используя 'defaultdict':' from collections import defaultdict' 'def make_infinite_dict():' 'return defaultdict (make_infinite_dict)' 'my_infinite_dict = make_infinite_dict (make_infinite_dict)) ' – icktoofay