Nói, tôi có mixins sau đó chồng chéo với nhau bằng cách chạm dispatch()
:Thứ tự của mixin ảnh hưởng đến lớp dẫn xuất như thế nào?
class FooMixin(object):
def dispatch(self, *args, **kwargs):
# perform check A
...
return super(FooMixin, self).dispatch(*args, **kwargs)
class BarMixin(object):
def dispatch(self, *args, **kwargs):
# perform check B
...
return super(FooMixin, self).dispatch(*args, **kwargs)
Nếu tôi muốn quan điểm của tôi phải trải qua trình tự, kiểm tra A -> kiểm tra B, nên mã của tôi được MyView(FooMixin, BarMixin, View)
hoặc MyView(BarMixin, FooMixin, View)
?
Và tại sao chúng tôi luôn đặt View
hoặc các lớp con sau khi kết hợp? (Tôi đã nhận thấy điều này từ việc đọc mã nguồn của chế độ xem tổng quát django, nhưng tôi không biết lý do đằng sau nó, nếu có)
thx agf. Câu hỏi của tôi có nghĩa là "tại sao nó được thêm vào cuối cùng" và bạn đã trả lời nó. Chúc mừng. – tamakisquare
Chỉ cần rõ ràng, phương thức duy nhất mà cuộc gọi này gọi trực tiếp là 'FooMixin.dispatch'. 'super (FooMixin, self) .dispatch' sau đó đánh giá thành' BarMixin.dispatch' vì 'đối tượng' không có phương thức' dispatch'. 'super (BarMixin, self) .dispatch' đánh giá thành' UltimateBase.dispatch' cho cùng một lý do. –
@MadPhysicist Điều đó không hoàn toàn đúng. Điều này sẽ làm việc ngay cả khi phương pháp này cũng được định nghĩa bởi đối tượng - tự mình thử. Xem câu trả lời được liên kết để biết thêm thông tin. – agf