Tôi thấy rằng người định cư của bạn chỉ cần đăng nhập một tin nhắn và sau đó chỉ cần gán giá trị - trên thực tế, câu trả lời được chấp nhận của bạn chỉ cần gán giá trị. Bạn đang sử dụng mô hình này bởi vì nó là Thực hành được chấp nhận/Trí tuệ thông thường trong một số ngôn ngữ khác, có lẽ một người có tên bắt đầu bằng chữ "J"? Nếu vậy, thì hãy biết rằng cách tiếp cận Pythonic để thiết kế này cùng là nhiều đơn giản hơn:
class Of2010(object):
def __init__(self):
self.a = 1
self.b = 2
self.c = 3
Không làm-gì setters, không có chức năng trung gian gọi chỉ để gán một giá trị. "Cái gì ?!", bạn nói? "Tiếp xúc công khai với biến thành viên? !!" Vâng, có thực sự.
Xem các lớp này từ quan điểm của mã khách hàng. Để sử dụng lớp học của bạn, khách hàng tạo ra một đối tượng, và sau đó gán thuộc tính "a" sử dụng:
obj = Of2010()
obj.a = 42
Đáng chú ý, đây là mã chính xác tương tự cho các lớp 5-liner tôi đã đăng ở trên.
Tại sao ngôn ngữ J khuyến khích phong cách thuộc tính tiết tú hơn? Để bảo vệ giao diện lớp trong trường hợp thay đổi trong tương lai trong các yêu cầu. Nếu tại một thời điểm nào đó, một số giá trị khác của đối tượng phải thay đổi trong buổi hòa nhạc với bất kỳ thay đổi nào đối với a, thì bạn phải thực hiện cơ chế đặc tính. Đáng buồn thay, ngôn ngữ J cho thấy bản chất của cơ chế truy cập thuộc tính đối với mã máy khách, để giới thiệu một thuộc tính tại một số điểm trong tương lai là một nhiệm vụ tái cấu trúc xâm nhập sẽ yêu cầu xây dựng lại tất cả các máy khách sử dụng lớp đó và thuộc tính "a" của nó.
Trong Python, không phải như vậy. Truy cập vào thuộc tính "a" của đối tượng được xác định trong thời gian chạy trong trình gọi. Vì truy cập trực tiếp và truy cập thuộc tính cả "nhìn" giống nhau, lớp Python của bạn bảo toàn giao diện này mặc dù cơ chế thực tế là khác nhau. Điều quan trọng là nó giống hệt như mã khách hàng có liên quan. Vì vậy, trong Java, người ta giới thiệu tính phức tạp của thuộc tính này ngay từ khi bắt đầu lớp này (và trên thực tế, bằng Thực hành được chấp nhận, của tất cả các lớp), trên cơ hội nó có thể trở nên cần thiết một số ngày trong Tương lai. Với Python, người ta có thể bắt đầu bằng cách thực hiện điều đơn giản nhất có thể làm việc, đó là, truy cập trực tiếp vào các biến thành viên đơn giản, để lại phương pháp phức tạp cho thời gian trong tương lai. Kể từ ngày đó có thể không bao giờ thực sự đến, đây là một bước tiến lớn trong việc nhận được phiên bản làm việc đầu tiên của mã của bạn ra khỏi cửa.
Thuộc tính của nó (fset = ...), nhưng nếu không tôi sẽ sử dụng một cái gì đó như thế. – olt
@olt: Cảm ơn, đã sửa. –