Tôi có một lớp nơi các cá thể của lớp này cần theo dõi các thay đổi đối với các thuộc tính của nó.Theo dõi các thay đổi đối với danh sách và từ điển trong python?
Ví dụ: obj.att = 2
sẽ là thứ dễ dàng theo dõi chỉ bằng cách ghi đè __setattr__
của obj
.
Tuy nhiên, có sự cố khi thuộc tính tôi muốn thay đổi là chính đối tượng, như danh sách hoặc lệnh chính tả.
Tôi làm cách nào để có thể theo dõi những thứ như obj.att.append(1)
hoặc obj.att.pop(2)
?
Tôi đang nghĩ đến việc mở rộng danh sách hoặc các lớp từ điển, nhưng khỉ vá các trường hợp của những lớp học khi obj
và obj.att
được cả hai khởi tạo để obj
được thông báo khi có những thứ như .append
được gọi. Bằng cách nào đó, điều đó không cảm thấy rất thanh lịch. Một cách khác mà tôi có thể nghĩ là sẽ chuyển một thể hiện của obj
vào khởi tạo danh sách, nhưng điều đó sẽ phá vỡ rất nhiều mã hiện có cộng với nó dường như thậm chí còn kém thanh lịch hơn so với phương thức trước đó.
Bất kỳ ý tưởng/đề xuất nào khác? Có một giải pháp đơn giản mà tôi đang thiếu ở đây?
những gì về làm cho các đối tượng thực tập và cho phép truy cập từ bên ngoài chỉ trên các lớp getter và setter? – joni
bạn có thể sắp xếp các đối tượng và so sánh các phiên bản được tuần tự hóa. –
Tôi đồng ý với joni. Hãy xem xét Luật Demeter ở đây. Ngoài ra, không cho phép truy cập vào 'attr' trực tiếp nhưng cung cấp getters và setters tạo bản sao sâu. – Thomas