Je suppose que c'est pour ne pas « écraser » la propriété de la classe parente. Si tu mettais simplement @property def x(... dans la classe D, tous les « accesseurs » (getter, setter et deleter) de la classe parente disparaîtraient, car ils sont tous associés à la valiable (de classe) x. En particulier, ici, on perdrait le deleter, puisqu'on redéfinit tout de même le getter et le setter.
Quand tu précises @une_propriété.getter ou autre setter/deleter, la variable contenant la propriété va être écrasée, mais en gardant les accesseurs déjà déclarées, car c'est le décorateur spécifique à la propriété déjà définie auparavant qui est utilisé. Ici, dans la classe D, on utilise le décorateur de la classe C « C.x.getter » pour créer un getter qui conservera les autres accesseurs. Une fois cette propriété définie dans la classe D, on peut l'utiliser pour les accesseurs suivants (ici, le setter de D).
PS : j'utilise le mot « accesseur » pour désigner aussi bien le getter que le setter et deleter ; je ne trouve pas de meilleur mot.
# Supposition
Posté par benoar . En réponse au message Python: getter, setter, and deleter. Évalué à 2.
Je suppose que c'est pour ne pas « écraser » la propriété de la classe parente. Si tu mettais simplement @property def x(... dans la classe D, tous les « accesseurs » (getter, setter et deleter) de la classe parente disparaîtraient, car ils sont tous associés à la valiable (de classe) x. En particulier, ici, on perdrait le deleter, puisqu'on redéfinit tout de même le getter et le setter.
Quand tu précises @une_propriété.getter ou autre setter/deleter, la variable contenant la propriété va être écrasée, mais en gardant les accesseurs déjà déclarées, car c'est le décorateur spécifique à la propriété déjà définie auparavant qui est utilisé. Ici, dans la classe D, on utilise le décorateur de la classe C « C.x.getter » pour créer un getter qui conservera les autres accesseurs. Une fois cette propriété définie dans la classe D, on peut l'utiliser pour les accesseurs suivants (ici, le setter de D).
PS : j'utilise le mot « accesseur » pour désigner aussi bien le getter que le setter et deleter ; je ne trouve pas de meilleur mot.