В общем, нет, нет возможности обернуть доступ к атрибуту объекта, кроме вас. Конечно, нет ничего с синтаксисом, который может быть вложен аккуратно (вы можете объявить класс в своей функции свойств, но он становится уродливым быстро).
То есть, в выражении типа obj.prop_a.prop_b
, верхний объект уровня obj
не может непосредственно контролировать то, что происходит с доступом к prop_b
атрибут, который происходит на другом объекте.
В качестве примера рассмотрим следующую последовательность операторов:
foo = obj.prop_a
bar = foo.prop_b
Значение, присвоенное bar
такое же, как obj.prop_a.prop_b
, но это утверждение не относится непосредственно к obj
вообще.
Если вы хотите попасть в мутный мир объектов-оберток, возможно, вам удастся сделать то, что вы хотите, но это не будет таким же простым, как базовое свойство. Как и в ответе @ qwwqwwq, вы можете вернуть obj.prop_a
экземпляр класса со своей собственной функцией @property
, украшенной функцией prop_b
.
Вы можете даже объявить класс внутри функции prop_a
, если вас не беспокоит, что он доступен из внешнего мира. Для чего-то сложного, однако, это будет беспорядочно быстро.
Вместо этого рассмотрите, можно ли получить доступ к объекту obj.prop_a.prop_b
через свойство или метод непосредственно на obj
, например obj.prop_a_b
. Я подозреваю, что вы найдете гораздо лучший дизайн таким образом.
Недвижимость должна будет вернуть второе имущество. Просто объявление второго свойства в первом не делает его атрибутом. – ApproachingDarknessFish
@ValekHalfHeart: возврат объекта свойства не будет работать. Вам нужно вернуть экземпляр класса, содержащего объект свойства. – Blckknght