Đây là câu hỏi được nhắc bởi another question từ tôi.Mô hình trừu tượng Django so với các hỗn hợp Python đơn giản và Python ABC
Django cung cấp chức năng Abstract base classes (không giống với các lớp ABC bằng Python?) Để người ta có thể tạo Mô hình (mô hình Dj.Model) từ đó người ta có thể kế thừa, nhưng không có Mô hình đó có bảng thực tế trong cơ sở dữ liệu. Một trigger kích hoạt hành vi này bằng cách thiết lập thuộc tính 'abstract' trong lớp Meta của Model.
Bây giờ câu hỏi: tại sao Django giải quyết theo cách này? Tại sao cần cho loại mô hình 'Tóm tắt cơ sở' đặc biệt này? Tại sao không tạo ra một mixin Model bằng cách thừa kế từ lớp đối tượng và trộn lẫn với một Model hiện có? Hoặc điều này cũng có thể bởi một nhiệm vụ cho Python ABC? (Tâm trí bạn tôi không phải là rất quen thuộc với các lớp học ABC bằng Python, sự thiếu hiểu biết của tôi có thể hiển thị ở đây)
(Đánh dấu phần này là câu trả lời được chấp nhận, mặc dù Daniel cũng tốt, nhưng Aram đã mở rộng thêm một chút về các bit gritty-nitty.) Tôi có đúng khi hiểu rằng, bằng cách sử dụng mixin kế thừa đối tượng tôi có thể để khai báo các trường thừa trên Mô hình? Nhưng tôi có thể thêm các phương thức bổ sung hoặc ghi đè chúng? – hopla
Có, các hỗn hợp kế thừa đối tượng có thể khai báo các trường và phương thức bổ sung. Bạn có thể ghi đè lên các phương thức bằng cách đảm bảo rằng hỗn hợp kế thừa đối tượng của bạn xuất hiện đầu tiên trong danh sách các lớp để kế thừa từ đó. Tuy nhiên, bất kể thứ tự, một mixin kế thừa đối tượng không thể ghi đè lên một trường (nó sẽ không thất bại để xác nhận nếu nó cố gắng mặc dù). –