Пытаюсь создать класс для постоянных переменных, не знаю, как мне следует создать сеттер для этого класса

#python #class #getter-setter

Вопрос:

 class PersistenVars:
    
    def __init__(self, filename):
        self.filename = filename
    
        with open(filename, 'r') as file:
            # Saved variables as a list [start, end, index]
            self.content = eval(file.read())
            
        self.start = self.content[0]
        self.end   = self.content[1]
        self.index = self.content[2]
 

Всякий раз , когда я обновляю значение self.start , self.end или self.index я также хочу обновить файл и self.content (с новыми значениями).

Сначала я попытался использовать декоратор свойств для каждого атрибута, но я просто пишу одно и то же снова и снова для чего-то, что выполняет ту же цель.

 class PersistenVars:
    
    def __init__(self, filename):
        self.filename = filename
    
        with open(filename, 'r') as file:
            # Saved variables as a list
            self.content = eval(file.read())
            
        self._start = self.content[0]
        self._end   = self.content[1]
        self._index = self.content[2]
        
    @property
    def start(self):
        return self._start
    
    @start.setter
    def start(self, value):
        self.content[0] = self._start = value
        with open(self.filename, 'w') as file:
            file.write(repr(self.content))


# And the same thing for the end, index
 

Каков самый питонический способ продолжать в том же духе?

Комментарии:

1. Будьте очень уверены, что никто другой не сможет отредактировать резервное хранилище, прежде eval чем включить его содержимое.

2. По сути, вы пытаетесь заново pickle реализовать модуль с нуля.

3. @чепнер, да, никто не должен быть в состоянии, спасибо за вашу заботу

4. @chepner Я слышал о модуле (хотя только название), но не знал, что он может это сделать, я проверю его

5. (На самом деле, shelve может быть, это было бы более уместно. pickle сериализует значения; shelve используется pickle для реализации сопоставления, изменения которого могут быть автоматически записаны на диск при назначении.)