Trong Python, getter và setter không giống như các ngôn ngữ lập trình khác. Về cơ bản, mục đích chính khi sử dụng getter và setter trong lập trình hướng đối tượng là để đóng gói dữ liệu.
Tham khảo bài viết lập trình hướng đối tượng trong Python.
Bài viết này CodeTuTam cùng các bạn đi tìm hiểu về Getter và Setter trong Python. Đồng thời tìm hiểu cách sử dụng chúng linh hoạt trong từng trường hợp.
Các biến private trong Python cũng không thực sự là private giống ngôn ngữ khác.
Getter và setter trong python khi đó thường được sử dụng khi:
Cũng giống như trong PHP, để tạo ra các getter và setter chúng ta có thể định nghĩa các hàm get và set, ví dụ
# Python program showing a use # of get() and set() method in # normal function class Geek: def __init__(self, age = 0): self._age = age # getter method def get_age(self): return self._age # setter method def set_age(self, x): self._age = x raj = Geek() # setting the age using setter raj.set_age(21) # retrieving age using getter print(raj.get_age()) print(raj._age)
Kết quả
21 21
Trong đó các hàm get_age() và set_age() chỉ là các hàm thông thường trong python mà thôi.
Trong python, hàm property() là hàm được xây dựng sẵn để tạo và trả về thuộc tính của đối tượng. Một thuộc tính đối tượng có 3 hàm: getter(), setter() và delete()
hàm property() trong Python sẽ có 4 tham số.
property(fget, fset, fdel, doc)
trong đó
fget là function để lấy giá trị thuộc tính
fset là function để gán giá trị cho thuộc tính
fdel là function để xóa giá trị 1 thuộc tính
doc để tạo docstring cho thuộc tính
Một thuộc tính đối tượng sẽ có phương thức getter(), setter(), delete() để chỉ định fget, fset, fdet. Ví dụ
# Python program showing a # use of property() function class Geeks: def __init__(self): self._age = 0 # function to get value of _age def get_age(self): print("getter method called") return self._age # function to set value of _age def set_age(self, a): print("setter method called") self._age = a # function to delete _age attribute def del_age(self): del self._age age = property(get_age, set_age, del_age) mark = Geeks() mark.age = 10 print(mark.age)
Kết quả
setter method called getter method called 10
Trong đoạn code trên chúng ta chỉ in ra mark.age, tuy nhiên do các hàm set_age và get_age được gọi nên các dòng tương ứng được ghi ra.
Chúng ta vừa tìm hiểu về hàm property() để tạo ra các getter và setter. Ngoài ra Python cũng có decorator @property được tích hợp sẵn để làm được việc tương tự.
Mục đích chính của bất kì decorator nào là thay đổi phương thức hoặc thuộc tính của lớp sao cho người sử dụng không cần phải thực hiện bất kì thay đổi nào trong code của họ.
Ví dụ
# Python program showing the use of # @property class Geeks: def __init__(self): self._age = 0 # using property decorator # a getter function @property def age(self): print("getter method called") return self._age # a setter function @age.setter def age(self, a): if(a < 18): raise ValueError("Sorry you age is below eligibility criteria") print("setter method called") self._age = a mark = Geeks() mark.age = 19 print(mark.age)
Kết quả
setter method called getter method called 19
Như mã code trên đây sẽ nhìn sáng sủa nhất khi sử dụng @property.
Đối với Python, chúng ta có nhiều cách khách nhau để tạo getter và setter. Tùy theo thói quen, cũng như phong cách của mỗi người chúng ta có thẻ lựa chọn phương án khác nhau. Tuy vậy dù thực hiện theo bất kì cách nào thì hãy luôn nhớ rằng mục đích chính của getter và setter là để xác thực và đóng gói dữ liệu.
Bình luận: