Как в наследнике переопределить свойство? Может кто нибудь объяснить как происходит разрешение всего этого?
Почему в методе потомка сохранение работает но в свойстве content остается значение родителя?
И можно ли как-то переопределить свойство?from django.db import models
class Father(models.Model):
COST = 100
content = models.TextField(max_length=COST)
class Meta:
abstract = True
def save(self, *args, **kwargs):
if self.COST > 200:
self.action = True
super(Father, self).save(*args, **kwargs)
class Children(Father):
COST = 500
action = models.BooleanField(default=False)

21 Авг 2019 в 07:06
211 +1
0
Ответы
1

В Python переопределить свойство в наследнике можно просто объявив такое же свойство в наследнике.

В вашем примере, основная проблема заключается в том, что свойство content наследуется от родительского класса Father, и оно не переопределяется в наследнике Children, поэтому значение остается таким же, как у родителя.

Для того чтобы переопределить свойство content в наследнике Children, вам нужно повторно определить это свойство в наследнике:

class Children(Father):
COST = 500
content = models.TextField(max_length=COST)
action = models.BooleanField(default=False)

Теперь у класса Children будет своя версия свойства content, которая переопределит свойство унаследованное от Father.

Что касается метода save, он работает, потому что вы вызываете super(Children, self).save(*args, **kwargs), который вызывает метод save родительского класса Father. Но так как свойство content не было переопределено в наследнике Children, то и значение остается по умолчанию.

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир