Как предотвратить обновление "частных" данных в Python?
Простой код, в Вместо python2.7, с "индивидуальный" элемент данных "предметов". Я слышал, что на самом деле в Python нет ничего, что можно было бы сделать, чтобы объявить атрибут действительно "частным" ... этот код управляет изменением первого элемента списка элементов из экземпляра группы в строку. Почему и как я могу остановить его / перекодировать ?? Я чувствую боль в кругах Python , когда такие люди, как я, говорят о "частном", но придерживайтесь меня, пожалуйста, потому что я пытаюсь защитить себя здесь от того, что я "культурно" не должен делать - то есть писать в другие классы и экземпляры (как цитируется здесь: класс - есть ли у Python “частные” переменные в классах? - переполнение стека)
class Groups(): def __init__(self): self.__items = [] def add(self, name, hidden=None, position=None): if name not in self.__items: if position is None: print("appending %s" % name) self.__items.append(Group(name=name, hidden=hidden, position=position)) else: print("inserting %s" % name) self.__items.insert(position, Group(name=name, hidden=hidden, position=position)) print('after add, len=',len(self.__items)) def list(self): print("list():") print "".join(" item: "+x.name for x in self.__items) return self.__items g=Groups() print("adding ITEM") g.add("ITEM") g.list() print("changing..") g.list()[0]="Changed" g.list() Should now raise an exception
Метод list() возвращает элементы по ссылке, позволяя прямой доступ к списку, а не передавая по значению (т. е. копию элементов). Кроме того, имя mangling __items кажется неэффективным в том смысле, что я все еще могу изменять данные с помощью list()[0] =
Кстати, то, что я пытаюсь сделать здесь, - это абстрактная реализация __list. Сегодня это простой список Python, завтра я мог бы сделать его классом, но я хочу абстрагировать его в классе Groups.
Мне просто нужно какое-то образование здесь, думает я.
Что я уже пробовал:
ничего - не знаю, что делать, так как я изучаю Python.