Используйте средство установки родительских свойств при переопределении в дочернем классе

У меня есть ситуация, когда я переопределяю только установщик свойства:

class Parent:
    @property
    def x(self):
        return self.__dict__['x']
    @x.setter
    def x(self, val):
        self.__dict__['x'] = f'P{val}'

class Child(Parent):
    @Parent.x.setter
    def x(self, val):
         super().x = val
         print('all set')

Здесь оператор печати представляет собой обработку, которую я хочу выполнить после вызова установщика родительского объекта. Вы можете просто проигнорировать это. super().x = y - это моя собственная попытка вызвать указанный сеттер. Это терпит неудачу с

Attribute error: 'super' object has no attribute 'x'

Как правильно использовать установщик свойств из родительского класса в дочернем?

Я бы предпочел избежать следующего, даже если он работает нормально, поскольку включает явный вызов dunder-методов:

Parent.x.__set__(self, val)

В качестве бонуса есть ли возможность использовать super() в теле детского сеттера?

🤔 А знаете ли вы, что...
В Python есть инструменты для создания графиков и визуализации данных, такие как библиотеки Matplotlib и Seaborn.


5
484
1

Ответ:

Вы можете использовать функцию свойства fset:

class Child(Parent):
    @Parent.x.setter
    def x(self, val):
        Parent.x.fset(self, val)
        print('all set')