Việc sử dụng các phương thức getter và setter trong Python là gì?
Một lớp có thể có thêm một biến (đôi khi được gọi là thuộc tính). Khi bạn tạo các đối tượng, mỗi đối tượng đó có các giá trị duy nhất cho các biến đó Các biến lớp không cần phải được đặt trực tiếp. chúng có thể được đặt bằng các phương thức lớp. Đây là cách hướng đối tượng và giúp bạn tránh được những sai lầm khóa học liên quan. Hoàn thành khóa học & bài tập lập trình Python Thí dụChúng tôi tạo một lớp với một thuộc tính. Từ lớp đó, chúng tôi tạo ra một số đối tượng 1 class Friend: Các đối tượng này không có thuộc tính (công việc) được đặt. Để thiết lập, chúng ta có thể thiết lập trực tiếp nhưng đó là một cách làm không tốt. Thay vào đó chúng ta tạo ra hai phương thức. getJob() và setJob() Cách "Pythonic" không phải là sử dụng "getters" và "setters", mà sử dụng các thuộc tính đơn giản, như câu hỏi minh họa và 1 để xóa (nhưng tên được thay đổi để bảo vệ những người vô tội. nội trang)
Nếu sau này, bạn muốn sửa đổi cài đặt và nhận, bạn có thể làm như vậy mà không cần phải thay đổi mã người dùng, bằng cách sử dụng trình trang trí 2
(Mỗi cách sử dụng trình trang trí sao chép và cập nhật đối tượng thuộc tính trước đó, vì vậy lưu ý rằng bạn nên sử dụng cùng một tên cho mỗi hàm/phương thức đặt, nhận và xóa. ) Sau khi xác định ở trên, cài đặt ban đầu, nhận và xóa mã là như nhau
Bạn nên tránh điều này
Thứ nhất, cách trên không hiệu quả vì bạn không cung cấp đối số cho trường hợp thuộc tính sẽ được đặt thành (thường là 3), tức là
Thứ hai, điều này trùng lặp mục đích của hai phương pháp đặc biệt, 4 và 5Thứ ba, chúng ta cũng có các hàm tích hợp sẵn 6 và ________ 27class Friend:4 Trình trang trí 8 dùng để tạo getters và settersVí dụ: chúng tôi có thể sửa đổi hành vi cài đặt để đặt các hạn chế đối với giá trị được đặt class Friend:6 Nói chung, chúng tôi muốn tránh sử dụng 2 và chỉ sử dụng các thuộc tính trực tiếpĐây là những gì người dùng Python mong đợi. Theo quy tắc ít gây ngạc nhiên nhất, bạn nên cố gắng cung cấp cho người dùng của mình những gì họ mong đợi trừ khi bạn có lý do rất thuyết phục để làm ngược lại trình diễnVí dụ: giả sử chúng tôi cần thuộc tính protected của đối tượng là một số nguyên trong khoảng từ 0 đến 100 và ngăn việc xóa thuộc tính đó bằng các thông báo thích hợp để thông báo cho người dùng về cách sử dụng đúng class Friend:8 (Lưu ý rằng 0 đề cập đến 1 nhưng các phương thức thuộc tính đề cập đến 2. Điều này là để 0 sử dụng thuộc tính thông qua API công khai, đảm bảo thuộc tính được "bảo vệ". )Và cách sử dụng 3Những cái tên có quan trọng không?vâng họ làm. 4 và 5 tạo bản sao của tài sản gốc. Điều này cho phép các lớp con sửa đổi hành vi đúng cách mà không làm thay đổi hành vi trong lớp cha 6Bây giờ để nó hoạt động, bạn phải sử dụng các tên tương ứng 0Tôi không chắc điều này sẽ hữu ích ở đâu, nhưng trường hợp sử dụng là nếu bạn muốn thuộc tính chỉ nhận, đặt và/hoặc xóa. Có lẽ tốt nhất là dính vào cùng một thuộc tính ngữ nghĩa có cùng tên Sự kết luậnBắt đầu với các thuộc tính đơn giản Nếu sau này bạn cần chức năng xung quanh cài đặt, nhận và xóa, bạn có thể thêm chức năng đó bằng trình trang trí thuộc tính |