It looks obvious that you can override the property in a child class, and call "super" within it. Sounds OK? Yes, it is. However, when my colleague asked me about this behavior, I was confused. Maybe because I am a bit suspicious, every time I saw a magic thing of any kind in a code I expect a trap. What's why I decided to write a simple example to prove myself that it works as it should.
# -*- 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
Works as expected.
Parent property Child property
Actually, property decorator just set up an object of a special type instead of function (it's also an object of another special type) and don't touch any internal things in class. So this behavior is expected and clearly described in the documentation. But, who reads docs?