Как в наследнике переопределить свойство? Может кто нибудь объяснить как происходит разрешение всего этого? Почему в методе потомка сохранение работает но в свойстве 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)
В Python переопределить свойство в наследнике можно просто объявив такое же свойство в наследнике.
В вашем примере, основная проблема заключается в том, что свойство content наследуется от родительского класса Father, и оно не переопределяется в наследнике Children, поэтому значение остается таким же, как у родителя.
Для того чтобы переопределить свойство content в наследнике Children, вам нужно повторно определить это свойство в наследнике:
Теперь у класса Children будет своя версия свойства content, которая переопределит свойство унаследованное от Father.
Что касается метода save, он работает, потому что вы вызываете super(Children, self).save(*args, **kwargs), который вызывает метод save родительского класса Father. Но так как свойство content не было переопределено в наследнике Children, то и значение остается по умолчанию.
В 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, то и значение остается по умолчанию.