Кажется очевидным, что property можно переопределить в классе‑наследнике и вызвать super внутри этого переопределённого свойства. Вроде бы звучит нормально? Да, так и есть. Тем не менее, когда мой коллега задал мне такой вопрос, я «завис» на некоторое время. Возможно, я излишне подозрителен, но каждый раз, когда в коде есть какая‑то магия, я ожидаю подвоха. Поэтому я решил немного поэкспериментировать и доказать себе, что свойства (property) работают так, как ожидается.

# -*- coding: utf-8 -*-
from __future__ import print_function, unicode_literals, absolute_import


class Parent(object):
    @property
    def prop(self):
        print("Parent property")

class Child(Parent):
    @property
    def prop(self):
        super(Child, self).prop
        print("Child property")

child = Child()
child.prop

Работает, как и ожидалось:

Parent property
Child property

В действительности декоратор property всего лишь устанавливает объект особого типа вместо функции (которая, кстати, также является объектом особого типа) и не трогает внутреннюю структуру класса. Так что подобное поведение ожидаемо и ясно описано в документации. Но кто читает доки?