Как работает наследование в объектно-ориентированном программировании на Python

Создавая текстовое поле в модели в Django, мы делаем следующее:

class Book(models.Model):
title = models.CharField(max_length=200)

CharField, является классом со следующей цепочкой наследования

Файл: django.db.models.fields.init

Классы: class Field(RegisterLookupMixin) / class CharField(Field)

А models.Model, который используется для регистрации модели, в свою очередь, имеет следующую цепочку наследования:

File: django.db.models.base
Classes: class ModelBase(type) / class Model(metaclass=ModelBase):

Вопросы:

  1. How models works when registering a model.CharField ? CharField is not a direct descendant of models, then why can we specify them after each other?

  2. When registering a model, we declare class Book(models.Model). Specify CharField in the fields. Why can we do this, despite the fact that they are not directly related by inheritance?

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