Đối số động trang trí python
Python là một ngôn ngữ rất mạnh mẽ, một trong những phần quan trọng nhất của Python that decorator. Trong ngữ cảnh của mẫu thiết kế, ta có thể hiểu decorator là những hàm thay đổi tính năng của một hàm, phương thức hay lớp động một cách, mà không được sử dụng lớp con. Nó rất tiện lợi khi bạn muốn mở rộng tính năng của một chức năng mà bạn không muốn thay đổi nó. Chúng ta có thể triển khai mẫu trang trí ở bất kỳ đâu, nhưng Python tạo điều kiện cho công việc đó bằng cách cung cấp nhưng tính năng và cú pháp vô cùng tiện ích Show Trong bài viết này, chúng ta sẽ cùng tìm hiểu về trình trang trí chức năng Python, cùng với một loạt các ví dụ để làm sáng tỏ vấn đề Về cơ bản, trình trang trí hoạt động như một trình bao bọc, thay đổi hành vi của mã đoạn trước và sau khi chức năng mục tiêu được thực thi mà không phải thay đổi chức năng mục tiêu chính, tăng cường chức năng ban đầu bằng cách trang trí nó Mọi thứ trong Python đều là đối tượngTrước khi đi sâu vào decorator, ta cần ôn lại một vài kiến thức về Python. Trong Python, hàm cũng là đối tượng và chúng ta có thể làm được nhiều thứ với hàm Gán cho nó bằng một biến
Định nghĩa hàm trong một hàm khác
Hàm có thể truyền như một tham số đến một hàm khác
Chức năng có thể trả về một chức năng khácNói cách khác chức năng có thể sinh ra một chức năng
Hàm bên trong có quyền truy cập vào tài nguyên trong phạm vi nó thuộc vềThường được biết đến với cái tên là 0
Thành phần của decoratorTrình trang trí chức năng đơn giản là trình bao bọc của một chức năng có sẵn. Kết hợp các tính chất đã được đề cập ở trên lại, chúng ta có thể xây dựng một trang trí
Chúng ta vừa áp dụng các quy tắc học bị từ chối. Đây chính xác là những gì decorator làm trong Python. Nó bọc một chức năng và thay đổi cách hoạt động của nó Cú pháp trang trí PythonPython make work and use decorator trở nên gọn gàng hơn. Để trang trí chức năng 1 chúng ta không cần phải viết 2 thay vào đó chúng ta có thể viết như sau sử dụng cách viết tắt gọn đẹp hơn bằng ký hiệu 3 kèm theo tên của chức năng trang trí phía trên chức năng được trang trí 0Nhưng cách viết này nhiều khi lại không như chúng ta mong muốn, sau khi đã tô chức năng 1, chạy đoạn mã sau 2Giờ đây, chức năng của chúng ta đã được thay thế bởi 5. Nó sẽ ghi đè tên và chuỗi tài liệu của hàm đó. Python đã cung cấp một chức năng giải quyết vấn đề này đó là 6. With change the example before by 6 6Ghi chú. 8 nhận một hàm sẽ được trang trí sao chép cả tên hàm, chuỗi tài liệu, danh sách các tham số,. Nó cho phép truy cập các thuộc tính của chức năng trước khi chức năng được trang tríBây giờ chúng ta sẽ áp dụng cùng một công cụ trang trí vào một số trường hợp sử dụng Trường hợp sử dụngủy quyềnNgười trang trí có thể giúp kiểm tra một người đã được ủy quyền để sử dụng một điểm cuối bất kỳ trên web ứng dụng. Nó được sử dụng rất rộng rãi trong framework Flask hay Django của Python. Sau đây là một ví dụ xác thực dựa trên việc sử dụng decorator 8ghi nhật kýGhi nhật ký là một ví dụ khác có thể sử dụng trang trí 0Sử dụng decorator với tham sốNếu chú ý, chúng ta có thể thấy 9 cũng là một vật trang trí, nhưng nó được truyền vào một tham số như những chức năng khác. Khi chúng ta sử dụng cú pháp 0, chúng ta gọi một hàm bao bọc với một chức năng như một tham số. Với Python, tất cả đều là đối tượng, kể cả hàm, chúng ta có thể viết một hàm trả về một hàm bao bọcViết trang trí bên trong một chức năngQuay trở lại với ví dụ về ghi nhật ký và tạo trình bao bọc cho phép chúng ta xác định đầu ra tệp nhật ký 1lớp trang tríBây giờ chúng ta đã có logit decorator, nhưng đôi khi trong ứng dụng của chúng ta có một vài thành phần nguy hiểm, và lỗi xảy ra ở những phần đó cần được chú ý đến ngay lập tức khi nó bắt đầu xảy ra. Ví dụ: khi chúng ta muốn ghi nhật ký ra tệp, nhưng với những lỗi nghiêm trọng, chúng ta muốn gửi thư, nhưng vẫn giữ nguyên nhật ký cho phép theo dõi. Đây là một trường hợp chúng ta có thể sử dụng để kế thừa May mắn là với Python, class cũng có thể được sử dụng để build decorator. Chúng ta sẽ xây dựng lại lớp logit thay vì chức năng 2Cách triển khai này nhìn gọn gàng hơn cách viết hàm lồng nhau trả về hàm bao bọc và cách hàm bao bọc với trình trang trí vẫn sử dụng cú pháp như cũ 3Bây giờ chúng ta có thể kế thừa lớp logit và thêm chức năng gửi thư bằng cách ghi đè hàm 1 |