Наследование классов python

В случае создания модели, например class Student(models.Model)
name=models.charfield(),roll=models.integerfield()

аналогично, В случае создания формы, class newform(forms.Form) name=forms.charfield(),roll=forms.integerfield()

аналогично, В случае создания сериализатора, класс serial(serializers.Serializer) name=serializers.charfield(),roll=serializers.integerfield()

Я понял, что в каждом классе наследуется базовый класс, но меня смущает, что если внутри класса в каждом сценарии создаются разные объекты разных классов, то какой смысл наследовать models.model, forms.Form, serializers.Serializer, что делают эти наследуемые классы?

Наследуясь от других классов, вы получаете доступ к их методам;

Class A(object): 
    def _print(self): 
        print('Class A') 

Class B(A): 
    def other_print(self): 
        print('Class B')

if __name__ == "__main__":
    a, b = A(), B() 

    a._print()

    b._print()
    b.other_print()

При наследовании от модели, формы и т.д.... Вы наследуете от объекта, который уже интегрирован во фреймворк и, таким образом, имеет определенные методы для работы с фреймворком. Например, модель будет зарегистрирована в базе данных, форма "знает", как правильно отрисовывать и т.д...

Когда вы наследуете от этих классов, у вас уже есть заранее созданный объект со всеми этими методами.

Django использует наследование, а также композицию объектов, которые являются техниками ООП для повторного использования.

В качестве примера возьмем ваш первый класс (для простоты я сохранил только одно поле):

Student(models.Model):
   name = models.CharField(max_length=100)

Наследование:

Первая строка Student(model.Model): делает наследование, наследуя от класса Model, используя который вы получаете такие методы как save(), delete(), clean_fields и т.д. Теперь ваш класс Student может повторно использовать эти методы.

Композиция

Вторая строка name = models.CharField(max_length=100) выполняет композицию объектов, создавая объект name класса CharField, используя который вы получаете методы check, get_internal_type и т.д.

Все эти встроенные классы (Model, CharField и т.д.) определены в файле models.py, поэтому, когда вы делаете models.Model, вы получаете Model класс из файла models.py, а models.CharField дает вам CharField класс из того же файла.

Вернуться на верх