Hướng dẫn python property decorator setter example - ví dụ setter trang trí thuộc tính python
Chào mừng! Trong bài viết này, bạn sẽ học cách làm việc với người trang trí Show
Bạn sẽ học:
1⃣ Ưu điểm của các tài sản trong PythonHãy bắt đầu với một chút bối cảnh. Tại sao bạn sẽ sử dụng các thuộc tính trong Python?Why would you use properties in Python? Các thuộc tính có thể được coi là cách làm việc "Pythonic" với các thuộc tính vì:
Những lợi thế này làm cho các thuộc tính trở thành một công cụ thực sự tuyệt vời để giúp bạn viết mã ngắn gọn và dễ đọc hơn. ?? 2⃣ Giới thiệu về trang tríDecoratorsMột hàm trang trí về cơ bản là một chức năng thêm chức năng mới cho một hàm được truyền làm đối số. Sử dụng một chức năng trang trí giống như thêm rắc sô cô la vào một loại kem?. Nó cho phép chúng tôi thêm chức năng mới vào một chức năng hiện có mà không cần sửa đổi nó.decorator function is basically a function that adds new functionality to a function that is passed as argument. Using a decorator function is like adding chocolate sprinkles to an ice cream ?. It lets us add new functionality to an existing function without modifying it. Trong ví dụ dưới đây, bạn có thể thấy chức năng trang trí điển hình trông như thế nào trong Python:
Hãy phân tích các yếu tố này một cách chi tiết:
Nếu chúng ta chạy mã, chúng ta sẽ thấy đầu ra này:
Lưu ý cách chức năng trang trí chạy ngay cả khi chúng ta chỉ gọi 6. Đây là phép thuật của việc thêm @Decorator?.💡note: Nói chung, chúng tôi sẽ viết 7, replacing the name of the decorator function after the @ symbol.Tôi biết bạn có thể hỏi: Điều này liên quan đến @property như thế nào? @Property là một công cụ trang trí tích hợp cho hàm tài sản () trong Python. Nó được sử dụng để cung cấp chức năng "đặc biệt" cho một số phương pháp nhất định để làm cho chúng hoạt động như getters, setters hoặc deleter khi chúng ta xác định các thuộc tính trong một lớp. The @property is a built-in decorator for the property() function in Python. It is used to give "special" functionality to certain methods to make them act as getters, setters, or deleters when we define properties in a class. Bây giờ bạn đã quen thuộc với các nhà trang trí, hãy xem một kịch bản thực sự về việc sử dụng @Property! Kịch bản trong thế giới thực: @PropertyHãy nói rằng lớp này là một phần của chương trình của bạn. Bạn đang mô hình hóa một ngôi nhà với lớp 8 (hiện tại, lớp chỉ có thuộc tính phiên bản giá được xác định):
Thuộc tính trường hợp này là công khai vì tên của nó không có dấu gạch dưới hàng đầu. Vì thuộc tính hiện đang được công khai, rất có khả năng bạn và các nhà phát triển khác trong nhóm của bạn đã truy cập và sửa đổi thuộc tính trực tiếp trong các phần khác của chương trình bằng cách sử dụng ký hiệu DOT, như thế này:directly in other parts of the program using dot notation, like this:
Mẹo: OBJ đại diện cho một biến tham chiếu một ví dụ là 8.Tip: obj represents a variable that references an instance of 8. Cho đến nay mọi thứ đang hoạt động rất tốt, phải không? Butlet nói rằng bạn được yêu cầu làm cho thuộc tính này được bảo vệ (không công khai) và xác nhận giá trị mới trước khi gán nó. Cụ thể, bạn cần kiểm tra xem giá trị có phải là phao dương không. Bạn làm điều đó như thế nào? Hãy xem nào.But let's say that you are asked to make this attribute protected (non-public) and validate the new value before assigning it. Specifically, you need to check if the value is a positive float. How would you do that? Let's see. Thay đổi mã của bạnTại thời điểm này, nếu bạn quyết định thêm getters và setters, bạn và nhóm của bạn có thể sẽ hoảng loạn?. Điều này là do mỗi dòng mã truy cập hoặc sửa đổi giá trị của thuộc tính sẽ phải được sửa đổi để gọi getter hoặc setter, tương ứng. Nếu không, mã sẽ bị phá vỡ.
Nhưng ... tài sản đến giải cứu! Với 7, you and your team will not need to modify any of those lines because you will able to add getters and setters "behind the scenes" without affecting the syntax that you used to access or modify the attribute when it was public. Tuyệt vời, phải không? & nbsp; Nếu bạn quyết định sử dụng 7, lớp của bạn sẽ trông giống như ví dụ dưới đây:
Cụ thể, bạn có thể xác định ba phương thức cho một thuộc tính:three methods for a property:
Giá bây giờ là "được bảo vệ", xin lưu ý rằng thuộc tính giá hiện được coi là "được bảo vệ" vì chúng tôi đã thêm một dấu gạch dưới hàng đầu vào tên của nó trong 2:
Trong Python, theo quy ước, khi bạn thêm một dấu gạch dưới hàng đầu vào một tên, bạn đang nói với các nhà phát triển khác rằng nó không nên được truy cập hoặc sửa đổi trực tiếp bên ngoài lớp. Nó chỉ nên được truy cập thông qua các trung gian (getters và setters) nếu chúng có sẵn. 🔸 getterỞ đây chúng tôi có phương pháp getter:
Lưu ý cú pháp:
Dưới đây là một ví dụ về việc sử dụng phương pháp Getter: 0Lưu ý cách chúng tôi truy cập thuộc tính giá như thể nó là một thuộc tính công khai. Chúng tôi hoàn toàn không thay đổi cú pháp, nhưng chúng tôi thực sự đang sử dụng getter làm trung gian để tránh truy cập trực tiếp vào dữ liệu. SetterBây giờ chúng tôi có phương thức setter: 1Lưu ý cú pháp:
Dưới đây là một ví dụ về việc sử dụng phương pháp Getter: 2Lưu ý cách chúng tôi truy cập thuộc tính giá như thể nó là một thuộc tính công khai. Chúng tôi hoàn toàn không thay đổi cú pháp, nhưng chúng tôi thực sự đang sử dụng getter làm trung gian để tránh truy cập trực tiếp vào dữ liệu. 3Setter 4Bây giờ chúng tôi có phương thức setter:Tip: This proves that the setter method is working as an intermediary. It is being called "behind the scenes" when we try to update the value, so the descriptive message is displayed when the value is not valid. Extra Functionality Initial Functionality6 - Được sử dụng để chỉ ra rằng đây là phương thức setter cho tài sản giá. Lưu ý rằng chúng tôi không sử dụng @property.setter, chúng tôi đang sử dụng @price.setter. Tên của tài sản được bao gồm trước .Setter. 7 - Tiêu đề và danh sách các tham số. Lưu ý cách tên của thuộc tính được sử dụng làm tên của setter. Chúng tôi cũng có một tham số chính thức thứ hai (new_price), là giá trị mới sẽ được gán cho thuộc tính giá (nếu nó hợp lệ). 5Lưu ý cú pháp:
Dưới đây là một ví dụ về việc sử dụng phương pháp Getter:Tip: Notice that the name of the property is "reused" for all three methods. Lưu ý cách chúng tôi truy cập thuộc tính giá như thể nó là một thuộc tính công khai. Chúng tôi hoàn toàn không thay đổi cú pháp, nhưng chúng tôi thực sự đang sử dụng getter làm trung gian để tránh truy cập trực tiếp vào dữ liệu. 6Setter Bây giờ chúng tôi có phương thức setter: 6 - Được sử dụng để chỉ ra rằng đây là phương thức setter cho tài sản giá. Lưu ý rằng chúng tôi không sử dụng @property.setter, chúng tôi đang sử dụng @price.setter. Tên của tài sản được bao gồm trước .Setter. 7 - Tiêu đề và danh sách các tham số. Lưu ý cách tên của thuộc tính được sử dụng làm tên của setter. Chúng tôi cũng có một tham số chính thức thứ hai (new_price), là giá trị mới sẽ được gán cho thuộc tính giá (nếu nó hợp lệ).Cuối cùng, chúng tôi có thân máy của bộ setter nơi chúng tôi xác nhận đối số để kiểm tra xem đó có phải là một float tích cực và sau đó, nếu đối số là hợp lệ, chúng tôi cập nhật giá trị của thuộc tính. Nếu giá trị không hợp lệ, một thông báo mô tả được in. Bạn có thể chọn cách xử lý các giá trị không hợp lệ theo nhu cầu của chương trình của bạn. Đây là một ví dụ về việc sử dụng phương thức setter với @property:
Tôi thực sự hy vọng bạn thích bài viết của tôi và thấy nó hữu ích. Để tìm hiểu thêm về các thuộc tính và lập trình theo định hướng đối tượng trong Python, hãy xem khóa học trực tuyến của tôi, bao gồm hơn 6 giờ bài giảng video, bài tập mã hóa và các dự án nhỏ. To learn more about Properties and Object Oriented Programming in Python, check out my online course, which includes 6+ hours of video lectures, coding exercises, and mini projects. Học mã miễn phí. Chương trình giảng dạy nguồn mở của Freecodecamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu Người trang trí setter là gì trong Python?@Property là một công cụ trang trí tích hợp cho hàm tài sản () trong Python. Nó được sử dụng để cung cấp chức năng "đặc biệt" cho một số phương pháp nhất định để làm cho chúng hoạt động như getters, setters hoặc deleter khi chúng ta xác định các thuộc tính trong một lớp.. It is used to give "special" functionality to certain methods to make them act as getters, setters, or deleters when we define properties in a class.
Tài sản và setter trong Python là gì?@Property được sử dụng để có được giá trị của một thuộc tính riêng tư mà không cần sử dụng bất kỳ phương thức getter nào.Chúng ta phải đặt một dòng @Property trước phương thức mà chúng ta trả về biến riêng tư.Để đặt giá trị của biến riêng, chúng tôi sử dụng @method_name.setter trước phương thức.. We have to put a line @property in front of the method where we return the private variable. To set the value of the private variable, we use @method_name. setter in front of the method.
Tài sản trang trí trong Python là gì?Một tính năng trang trí trong Python kết thúc trong một chức năng, nối thêm một số chức năng vào mã hiện có và sau đó trả về nó.Các phương pháp và chức năng được biết là có thể gọi được vì chúng có thể được gọi.Do đó, một người trang trí cũng là một người có thể gọi lại có thể gọi được.wraps in a function, appends several functionalities to existing code and then returns it. Methods and functions are known to be callable as they can be called. Therefore, a decorator is also a callable that returns callable.
Ví dụ về các nhà trang trí trong Python là gì?Bạn sẽ sử dụng một bộ trang trí khi bạn cần thay đổi hành vi của một hàm mà không cần sửa đổi chức năng.Một vài ví dụ tốt là khi bạn muốn thêm ghi nhật ký, hiệu suất kiểm tra, thực hiện bộ nhớ đệm, xác minh quyền, v.v.Bạn cũng có thể sử dụng một khi bạn cần chạy cùng một mã trên nhiều chức năng.when you want to add logging, test performance, perform caching, verify permissions, and so on. You can also use one when you need to run the same code on multiple functions. |