Nếu chúng ta muốn sử dụng một chức năng như thuộc tính hoặc thuộc tính, chúng ta có thể sử dụng trình trang trí @property trong lập trình python. @property trong python là một công cụ trang trí. Trình trang trí @property là trình trang trí tích hợp có trong hàm property[]
Chúng ta cũng có thể sử dụng hàm property[] để định nghĩa các thuộc tính của lớp python
@property trong Python là gì?
Để tìm hiểu về @property trong python, trước tiên chúng ta nên biết thuật ngữ - decorator. Decorator là một loại hàm rất mạnh và đặc biệt trong python. Một trình trang trí lấy một hàm khác làm đối số của nó và nó trả về một hàm khác với hành vi đã sửa đổi
@property cũng là một trang trí. Nếu chúng ta muốn sử dụng một chức năng như thuộc tính hoặc thuộc tính, chúng ta có thể sử dụng trình trang trí @property. Trình trang trí @property là trình trang trí tích hợp có trong hàm property[]. Hàm property[] dùng để định nghĩa các thuộc tính của lớp python
Vì vậy, trình trang trí @property giúp công việc của chúng ta dễ dàng hơn, vì chúng ta không cần gọi hàm property[] theo cách thủ công để lấy các thuộc tính của lớp
Chúng ta có thể sử dụng trình trang trí @property trên bất kỳ phương thức nào của một lớp và sử dụng phương thức đó làm thuộc tính
Trình trang trí @property cũng làm cho việc sử dụng getters và setters dễ dàng hơn nhiều, chúng ta sẽ tìm hiểu thêm về getters và setters ở phần sau của bài viết này
Khai báo thuộc tính
Chúng ta cũng có thể khai báo một hàm là một thuộc tính bằng cách sử dụng hàm property[], hàm thuộc tính tự trả về đối tượng của lớp thuộc tính
Cú pháp cơ bản của phương thức property[] là. thuộc tính [fget, fset, fdel, doc]
- quên. fget là một đối số tùy chọn được sử dụng để lấy giá trị của một thuộc tính. Giá trị mặc định của nó được đặt thành Không có. [một getter cơ bản]
- fset. fset là một đối số tùy chọn được sử dụng để đặt giá trị của một thuộc tính. Giá trị mặc định của nó được đặt thành Không có. [một setter cơ bản]
- fdel. fdel là một đối số tùy chọn được sử dụng để xóa giá trị của một thuộc tính. Giá trị mặc định của nó được đặt thành Không có. [một trình xóa cơ bản]
- tài liệu. doc là viết tắt của docstring, nó chứa tài liệu cơ bản cho các thuộc tính của lớp. Giá trị mặc định của nó được đặt thành Không có
Những gì được trả lại bởi tài sản?
Có ba phương thức chủ yếu được liên kết với một thuộc tính trong python
- getter - nó được sử dụng để truy cập giá trị của thuộc tính
- setter - nó được sử dụng để đặt giá trị của thuộc tính
- deleter - nó được sử dụng để xóa thuộc tính thể hiện
Phương thức property[] trả về hàm dưới dạng lớp thuộc tính bằng cách sử dụng các getters, setters và deleters này
Hãy lấy một ví dụ để hiểu rõ hơn về phương thức property[]
class Person: def __init__[self, name]: self.name = name def get_name[self]: return self.name def set_name[self, new_value]: self.name = new_value def delete_name[self]: del self.name name = property[get_name, set_name, delete_name, 'Some sample DocString'] p1 = Person['Tom'] print["Name:", p1.name] p1.name = 'Hardy' del p1.name
đầu ra
Lớp ưu tiên
Hãy để chúng tôi lấy ví dụ về một lớp Person và chúng tôi sẽ khai báo một hàm cụ thể là person_name[]. Chúng ta sẽ tìm hiểu cách khai báo hàm dưới dạng thuộc tính bằng phương thức property[]. Phương thức thuộc tính sẽ chuyển đổi hàm thành thuộc tính
Ghi chú
Trình trang trí @property được khuyến nghị sử dụng trong trường hợp phương thức property[]
Cú pháp sử dụng phương thức property[]
class Person: # Constructor def __init__[self, name, age]: self.name = name self.age = age # a function to get the name of the Person def person_name[self]: return self.name # Setting the person_name[] function as a property using the property[] function. name_property = property[person_name] if __name__ == "__main__": Jack = Person["Jack", 26] print["The name of the Person is:", Jack.name_property]
đầu ra
The name of the Person is: Jack
Ghi chú
Nếu không khai báo hàm dưới dạng thuộc tính thì phải gọi hàm bằng dấu ngoặc đơn hoặc dấu [] sau tên hàm
Thí dụ. Jack. tên_người[]
Ngược lại, chúng ta sẽ lấy địa chỉ của hàm person_name[]
Sử dụng @property Decorator
Trước đó chúng ta đã học về phương thức property[]. Bây giờ, chúng ta hãy lấy ví dụ tương tự về lớp Person. Chúng tôi sẽ khai báo cùng một chức năng có tên person_name[]. Nhưng lần này, chúng ta sẽ tìm hiểu cách khai báo hàm dưới dạng thuộc tính bằng cách sử dụng @property decorator trong python. Trình trang trí @property trong python là kỹ thuật được sử dụng thường xuyên và thực tế hơn so với hàm property[]
Cú pháp sử dụng @property decorator
class Person: # Constructor def __init__[self, name, age]: self.name = name self.age = age # Setting the person_name[] function as a property using the @property decorator. @property def person_name[self]: return self.name if __name__ == "__main__": Jack = Person["Jack", 26] print["The name of the Person is:", Jack.person_name]
đầu ra
The name of the Person is: Jack
Chúng ta cũng có thể sử dụng lớp thuộc tính
Tại sao chúng ta nên sử dụng @property Decorator?
- @property decorator trong python là một cách dễ dàng hơn, dễ đọc hơn và ngắn gọn hơn để khai báo các thuộc tính
- Trình trang trí @property trong python là một ví dụ dễ hiểu về khả năng sử dụng lại mã và tên biến. Do đó, chúng ta có thể sử dụng lại cùng tên của một thuộc tính để tránh tạo tên mới cho getters, setters và deleters
- sử dụng trình trang trí @property trong python, chúng ta có thể dễ dàng lấy, đặt và xóa các giá trị bằng cách tránh truy cập hoặc sửa đổi dữ liệu trực tiếp chỉ bằng một đối tượng
Người thiết lập tài sản
Trong ví dụ trên, chúng ta đã thấy cú pháp và cách sử dụng @property decorator. Vấn đề chính với trình trang trí @property được sử dụng trong lớp Person là chúng ta không thể sử dụng thuộc tính để sửa đổi các thuộc tính hoặc giá trị của lớp. Trình trang trí @property chỉ có thể được sử dụng để truy cập giá trị được trả về bởi hàm person_name[]. Chúng tôi không thể sửa đổi giá trị bằng cách chỉ sử dụng trình trang trí @property trong python
Python có một phương thức trang trí đặc biệt gọi là phương thức setter giúp sửa đổi giá trị của hàm. Cú pháp khai báo decorator phương thức setter là. @tên tài sản. người định cư
Hãy lấy cùng một ví dụ về lớp Person và tìm hiểu cách sử dụng phương thức trang trí setter để sửa đổi giá trị của một hàm
class Person: # Constructor def __init__[self, name, age]: self.name = name self.age = age # Setting the person_name[] function as a property using the @property decorator. @property def person_name[self]: return self.name # Setting the person_name[] as a setter decorator. @person_name.setter def person_name[self, new_name]: self.name = new_name if __name__ == "__main__": Jack = Person["Jack", 26] print["The old name of the Person is:", Jack.person_name] new_name = "Jack Sparrow" # modifying the name of the Person. Jack.person_name = new_name print["The new name of the Person is:", Jack.person_name]
đầu ra
The old name of the Person is: Jack The new name of the Person is: Jack Sparrow
Trình xóa thuộc tính
Cũng giống như phương thức setter, python có phương thức deleter dùng để xóa thuộc tính của một lớp. Cú pháp khai báo trình trang trí phương thức deleter là. @tên tài sản. thợ xóa
Sau khi thuộc tính bị xóa, không thể truy cập thuộc tính đó bằng cùng một phiên bản
Khi chúng ta sử dụng từ khóa del với tên lớp, phương thức deleter được gọi sẽ xóa thuộc tính của lớp
Hãy lấy cùng một ví dụ về lớp Person và tìm hiểu cách sử dụng phương thức trang trí deleter để xóa thuộc tính name của lớp Person
class Person: # Constructor def __init__[self, name, age]: self.name = name self.age = age # Setting the person_name[] function as a property using the @property decorator. @property def person_name[self]: return self.name # Setting the person_name[] as a deleter decorator. @person_name.deleter def person_name[self]: print[self.name, "is deleted."] del self.name if __name__ == "__main__": Jack = Person["Jack", 26] print["The name of the Person is:", Jack.person_name] del Jack.person_name print["The name of the Person is:", Jack.person_name]
đầu ra
________số 8
Ghi chú
Như chúng ta có thể thấy trong ví dụ minh họa ở trên, sau khi chúng ta gọi phương thức deleter, thuộc tính name đã bị xóa. Vì vậy, khi chúng tôi cố gắng truy cập tên sau khi xóa, đã xảy ra lỗi cho biết đối tượng 'Người' không có thuộc tính 'tên'
Phương thức xóa không đặt giá trị thành Không, phương thức xóa sẽ xóa giá trị khỏi lớp
Lớp không có Getters và Setters
Hãy để chúng tôi lấy ví dụ về một lớp Sinh viên sẽ lưu trữ tên và số thứ tự của sinh viên. Chúng ta sẽ tạo các đối tượng cho lớp Sinh viên và sẽ sử dụng các đối tượng của lớp Sinh viên để lấy và đặt các giá trị của lớp
Tuy nhiên, việc sử dụng Đối tượng để cài đặt và nhận các giá trị không được khuyến nghị do các vấn đề về bảo mật dữ liệu. Ở phần sau của bài viết này, chúng ta sẽ tìm hiểu về một số phương thức được gọi là getters và setters sẽ giúp chúng ta thiết lập và lấy các giá trị của lớp
Cùng xem cách thực hiện để hiểu rõ hơn
class Student: def __init__[self, name="", roll=0]: self.name = name self.roll_no = roll if __name__ == "__main__": Tom = Student[] # Setting the name of the student-Tom: Tom.name = "Tom Hardy" Tom.roll_no = 5 print[f"Name:{Tom.name}, Roll Number:{Tom.roll_no}"]
đầu ra
0class Person: # Constructor def __init__[self, name, age]: self.name = name self.age = age # a function to get the name of the Person def person_name[self]: return self.name # Setting the person_name[] function as a property using the property[] function. name_property = property[person_name] if __name__ == "__main__": Jack = Person["Jack", 26] print["The name of the Person is:", Jack.name_property]
Sử dụng Getters và Setters
Trước đây chúng ta đã học về cách thiết lập và nhận các giá trị của lớp bằng cách sử dụng các đối tượng. Bây giờ chúng ta hãy tìm hiểu về hai phương thức được sử dụng phổ biến nhất là - phương thức getter và phương thức setter
Các phương thức getter và setter giúp chúng tôi bảo mật dữ liệu lớp của mình. Không có getters và setters, bất kỳ đối tượng nào cũng có thể truy cập và sửa đổi các giá trị của một lớp và
getter và setters giúp chúng ta đóng gói dữ liệu của mình trong một đối tượng bằng cách sử dụng các phương thức để dữ liệu không thể bị sửa đổi chỉ bằng cách sử dụng một đối tượng của lớp