Với mục đích đóng gói dữ liệu, hầu hết các ngôn ngữ hướng đối tượng sử dụng phương thức getters và setters. Điều này là do chúng ta muốn ẩn các thuộc tính của một lớp đối tượng khỏi các lớp khác để không xảy ra sửa đổi ngẫu nhiên dữ liệu bởi các phương thức trong các lớp khác.
Như tên cho thấy, getters là các phương thức giúp truy cập các thuộc tính private hoặc nhận giá trị của các thuộc tính private và setters là các phương thức giúp thay đổi hoặc đặt giá trị của các thuộc tính private.
Truy cập thuộc tính riêng tư
Dưới đây, chúng tôi viết mã để tạo một lớp, khởi tạo nó và truy cập các biến của nó mà không cần tạo thêm bất kỳ phương thức nào.
Ví dụ
class year_graduated: def __init__(self, year=0): self._year = year # Instantiating the class grad_obj = year_graduated() #Printing the object print(grad_obj) #Printing the object attribute print(grad_obj.year)
Đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau -
Đối tượng<__main__.year_graduated object at 0x00F2DD50> 0
Trong khi câu lệnh print đầu tiên cung cấp cho chúng ta thông tin chi tiết của đối tượng được tạo, thì đối tượng print thứ hai cung cấp cho chúng ta giá trị mặc định của thuộc tính private.
Sử dụng getters và setters
Trong các ví dụ dưới đây, chúng ta sẽ tạo một lớp, khởi tạo là và sau đó thêm một phương thức getter và setter vào mỗi chúng. Sau đó, truy cập các biến trong các phương thức này bằng cách khởi tạo lớp và sử dụng các phương thức getter và setter này. Vì vậy, bạn có thể ẩn logic của mình bên trong phương thức setter.
Ví dụ
class year_graduated: def __init__(self, year=0): self._year = year # getter method def get_year(self): return self._year # setter method def set_year(self, a): self._year = a grad_obj = year_graduated() # Before using setter print(grad_obj.get_year()) # After using setter grad_obj.set_year(2019) print(grad_obj._year)
Đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau:
0 2019
Đặt các thuộc tính ở chế độ riêng tư
Trong ví dụ tiếp theo, chúng ta sẽ thấy cách đặt các phương thức ở chế độ riêng tư để các biến trong nó không thể bị thao tác bởi các hàm gọi bên ngoài. Chúng chỉ có thể được thao tác bởi các hàm bên trong lớp. Chúng trở nên riêng tư bằng cách đặt trước chúng bằng hai dấu gạch dưới.
Ví dụ
class year_graduated: def __init__(self, year=32): self._year = year # make the getter method def get_year(self): return self.__year # make the setter method def set_year(self, a): self.__year = a grad_obj = year_graduated() print(grad_obj._year) # Before using setter print(grad_obj.get_year()) # # # After using setter grad_obj.set_year(2019) print(grad_obj._year)
Đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau:
32 AttributeError: 'year_graduated' object has no attribute '_year_graduated__year'
Đọc giá trị từ các phương pháp riêng tư
Không, chúng tôi có thể truy cập các giá trị thuộc tính private bằng cách sử dụng phương thức thuộc tính và không sử dụng phương thức getter.
Ví dụ
class year_graduated: def __init__(self, year=32): self._year = year @property def Aboutyear(self): return self.__year @Aboutyear.setter def Aboutyear(self, a): self.__year = a grad_obj = year_graduated() print(grad_obj._year) grad_obj.year = 2018 print(grad_obj.year)
Đầu ra
Chạy đoạn mã trên cho chúng ta kết quả sau:
32 2018