Как в наследнике переопределить свойство? Может кто нибудь объяснить как происходит разрешение всего этого?
Почему в методе потомка сохранение работает но в свойстве 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
231 +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 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир