Đọc mã nguồn Django mà tôi đến khi chức năng this. Đó là triển khai cho thẻ block.Tại sao đặt thuộc tính python "riêng" từ * bên ngoài * lớp?
gì tôi quan tâm là họ đang thiết lập một biến với hai dấu gạch hàng đầu (__loaded_blocks
) từ ngoài sơ thẩm parser
lớp (phân tích cú pháp là một thể hiện của các Parser class). Grep nhanh trong mã nguồn Django cho thấy chuỗi loaded_blocks
chỉ xảy ra ở đây.
Bây giờ tôi chưa bao giờ xem xét việc sử dụng tính năng mang tên trăn trước đây, nhưng điều này sẽ có hiệu lực ẩn thuộc tính __loaded_blocks
của chính mình là parser
! Để đọc thuộc tính này từ phương thức parser
, bạn phải sử dụng phương thức getattr(self, "__loaded_blocks")
.
Tôi có nghĩ rằng đây chỉ là tác dụng phụ không mong muốn và không sử dụng của tên thuộc tính đã chọn không? Hay có mục đích sâu sắc hơn về điều này?
Nói chung, tại sao bạn muốn làm một điều như vậy?
EDIT: Để làm rõ, tôi nhận thức đầy đủ rằng miễn là bạn không cố gắng truy cập vào các thuộc tính __loaded_blocks
từ một phương pháp parser
, nó sẽ làm việc giống như bất kỳ thuộc tính khác, và đó là trên thực tế, không phải là thuộc tính bị xé.
Không mục đích, Django chỉ có mã xấu xí. – Keith