Property в классе наследнике
Опубликовано 30 May 2017 в Python
Кажется очевидным, что property можно переопределить в классе наследнике и вызвать super внутри этого переопределенного свойства. Вроде бы звучит нормально? Да, так и есть. Тем не менее, когда мой коллега задал мне такой вопрос, я "завис" на некоторое время. Возможно я излишне подозрителен, но каждый раз когда в коде есть какая-то магия, я ожидаю подвоха. Поэтому, я решил немного поэкспериментировать и доказать себе, что проперти работают так как ожидается.
# -*- 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 всего лишь устанавливает объект особого типа вместо функции (которая, кстати, так же является объектом особого типа) и не трогает внутреннюю структуру класса. Так что подобное поведение ожидаемо и ясно описано в документации. Но кто читает доки?
Возник вопрос? Мне всегда можно написать в Twitter: avkorablev