Hướng dẫn what is decorator module in python? - mô-đun trang trí trong python là gì?

Vấn đề

Python có một vài hình thức cho các nhà trang trí, bạn có thể có một người trang trí đơn giản đơn giản, không có lập luận:

@mydecorator
def foo(): pass

Hoặc một người trang trí với một số lập luận:

@mydecorator(1, 2)
def foo(): pass

Bạn thậm chí có thể trang trí một lớp học:

@mydecorator
class Foo(object): pass

Và mỗi hình thức là một chút khác nhau để thực hiện. Điều này thật khó chịu nếu bạn muốn tạo ra các nhà trang trí dễ sử dụng, nơi nhà phát triển không cần phải lo lắng về

@mydecorator(1, 2)
def foo(): pass
0 làm việc khác với
@mydecorator(1, 2)
def foo(): pass
1.

Mô -đun trang trí

Lớp

@mydecorator(1, 2)
def foo(): pass
2 cho phép bạn dễ dàng tạo các trình trang trí rộng bao gồm tất cả các biểu mẫu và tất cả các loại (chức năng, phương thức, lớp) bằng cách sử dụng cùng một giao diện:

import decorators

class mydecorator(decorators.Decorator):
    def decorate_func(self, func, *dec_args, **dec_kwargs):
        def decorator(*args, *kwargs):
            print("You passed into the decorator these arguments", dec_args, dec_kwargs)
            print("You passed into your function these arguments", args, kwargs)
            print("Your function is", func)
            return func(*args, **kwargs)

        return decorator

    def decorate_class(self, klass, *dec_args, **dec_kwargs):
        print("You passed into the decorator these arguments", dec_args, dec_kwargs)
        print("Your class is", klass)
        return klass

Sau đó, bạn có thể sử dụng bộ trang trí này:

@mydecorator
def foo(): print "foo()"

@mydecorator(1, 2, boom="blam")
def bar(*args, **kwargs): print "bar()"

@mydecorator
class Baz(object): pass

@mydecorator(1, 2, boom="blam")
class Che(object): pass

Bây giờ, người trang trí của bạn có thể trang trí các chức năng hoặc lớp học, vượt qua trong các đối số hoặc không, và bạn không bao giờ phải lo lắng về sự khác biệt tinh tế giữa các nhà trang trí, và tốt nhất là bạn không phải nhân đôi mã.

Trang trí khác

Người nắn dịch

Lớp

@mydecorator(1, 2)
def foo(): pass
3 là tốt nếu bạn muốn tạo một bộ trang trí hoàn toàn linh hoạt, nếu bạn muốn thực thi người trang trí của mình chỉ được sử dụng cho một chức năng/phương thức, bạn có thể sử dụng
@mydecorator(1, 2)
def foo(): pass
4. Nếu bạn muốn chỉ trang trí một lớp, hãy sử dụng
@mydecorator(1, 2)
def foo(): pass
5 và nếu bạn muốn trang trí mọi phiên bản của một lớp, hãy sử dụng
@mydecorator(1, 2)
def foo(): pass
6.

Bất kể lớp con nào bạn sử dụng, bạn sẽ ghi đè phương thức

@mydecorator(1, 2)
def foo(): pass
7 để trả về chức năng trang trí của bạn:

import decorators

class only_func(FuncDecorator):
    def decorate(self, func, *dec_a, **dec_kw):
        def decorator(*args, **kwargs):
            return func(*args, **kwargs)
        return decorator

# this will work
@only_func
def foo(): pass

# this will fail
@only_func
class Foo(object): pass

Trang trí tài sản

Nhà trang trí

@mydecorator(1, 2)
def foo(): pass
8 là một sự thay thế thả vào cho bộ trang trí
@mydecorator(1, 2)
def foo(): pass
8 tích hợp của Python, với chức năng bổ sung:

from decorators import property

class Foo(object):
    @property
    def bar(self):
        """This will act just like python's built-in @property decorator"""
        return 1
        
    @property(cached="_che")
    def che(self):
        """This will cache the return value into _che and add a setter/deleter"""
        return 1

Trang trí lớp học

Cho phép bạn tạo một thuộc tính trên lớp:

from decorators import classproperty

class Foo(object):
    @classproperty
    def bar(cls):
        """Available as Foo.bar"""
        return 1
        
print(Foo.bar) # 1

Cài đặt

Sử dụng PIP:

pip install decorators

Hoặc, để có được phần mới nhất và lớn nhất từ ​​nguồn:

pip install -U "git+https://github.com/Jaymon/decorators#egg=decorators"

Máy trang trí Python được sử dụng để làm gì?

Trình trang trí là một mẫu thiết kế trong Python cho phép người dùng thêm chức năng mới vào một đối tượng hiện có mà không cần sửa đổi cấu trúc của nó. Người trang trí thường được gọi trước khi định nghĩa về một chức năng bạn muốn trang trí.allows a user to add new functionality to an existing object without modifying its structure. Decorators are usually called before the definition of a function you want to decorate.

Trang trí Python và ví dụ là gì?

Các nhà trang trí cung cấp một cú pháp đơn giản để gọi các chức năng bậc cao. Theo định nghĩa, một bộ trang trí là một hàm có một chức năng khác và mở rộng hành vi của hàm sau mà không sửa đổi rõ ràng nó.a function that takes another function and extends the behavior of the latter function without explicitly modifying it.

Tại sao chúng ta sử dụng người trang trí?

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 need to change the behavior of a function without modifying the function itself. A few good examples are 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.

Người trang trí trong lớp Python là gì?

Một người trang trí trong Python là bất kỳ đối tượng Python nào có thể gọi được được sử dụng để sửa đổi một hàm hoặc một lớp.Một tham chiếu đến một chức năng "func" hoặc một lớp "C" được chuyển cho một người trang trí và người trang trí trả về một chức năng hoặc lớp được sửa đổi.any callable Python object that is used to modify a function or a class. A reference to a function "func" or a class "C" is passed to a decorator and the decorator returns a modified function or class.