Нет, нетривиально.Вы не можете указать, чтобы метод пропускал назначение, и вы не можете указать коду в методе использовать другое имя атрибута.
Вы, конечно, можете заставить подкласс реализовать хук __setattr__
или @property
с установщиком на перехватить присвоение атрибута, но это не будет решением, если базовый класс также ожидает прочитать атрибут снова и основывать дальнейшее поведение на значении.Просто проще обновить код базовых классов или найти другие способы реализации того, что вам нужно.
Если вы используете два базовых класса, которые несовместимы, как это, то, возможно, вы используете эти базовые классы неправильно.
Ваш пример достаточно тривиален, но если оба этих базовых классов устанавливают один и тот же атрибут во взаимно несовместимое значение, то вы не можете ожидать, что код в любом из этих классов будетработать как задумано.Вы не можете переименовать использование атрибута, оба будут продолжать ожидать, что состояние атрибутов на self
будет следовать их собственным ограничениям, и поэтому оба в основном нарушены.
Для таких случаев, возможно, вам на самом деле не нужно подкласс.Возможно, вы хотели использовать вместо этого композицию, где ваш собственный пользовательский класс хранит экземпляр двух классов, которые вы теперь используете в качестве баз.