Trình trang trí thuộc tính python trả về đối tượng thuộc tính

Nó thường được coi là phương pháp hay nhất để tạo getters và setters cho các thuộc tính công khai của một lớp. Nhiều ngôn ngữ cho phép bạn triển khai điều này theo nhiều cách khác nhau, bằng cách sử dụng hàm [như

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
8] hoặc bằng cách sử dụng cấu trúc
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
9 hoặc
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
0 dành riêng cho ngôn ngữ. Trong Python, nó được thực hiện bằng cách sử dụng
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
0

Trong bài viết này, tôi sẽ mô tả trình trang trí thuộc tính Python mà bạn có thể đã thấy được sử dụng với cú pháp

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
1

class Person[object]:
    def __init__[self, first_name, last_name]:
        self.first_name = first_name
        self.last_name = last_name

    @property
    def full_name[self]:
        return self.first_name + ' ' + self.last_name

    @full_name.setter
    def full_name[self, value]:
        first_name, last_name = value.split[' ']
        self.first_name = first_name
        self.last_name = last_name

    @full_name.deleter
    def full_name[self]:
        del self.first_name
        del self.last_name

Đây là cách tạo getters, setters và deleters [hoặc phương thức biến đổi] của Python cho một thuộc tính trong một lớp

Trong trường hợp này, trình trang trí

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
0 làm cho nó nên bạn gọi phương thức
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
3 giống như nó chỉ là một thuộc tính bình thường, trong khi thực tế, nó thực sự là một phương thức chứa mã được chạy khi thuộc tính được đặt

Việc sử dụng một getter/setter/deleter như thế này mang lại cho chúng ta khá nhiều lợi thế, một vài trong số đó tôi đã liệt kê ở đây

  • Thẩm định. Trước khi đặt thuộc tính nội bộ, bạn có thể xác thực rằng giá trị được cung cấp đáp ứng một số tiêu chí và nó sẽ báo lỗi nếu không
  • tải chậm. Tài nguyên có thể được tải chậm để trì hoãn công việc cho đến khi thực sự cần thiết, tiết kiệm thời gian và tài nguyên
  • trừu tượng. Getters và setters cho phép bạn trừu tượng hóa biểu diễn bên trong của dữ liệu. Giống như ví dụ của chúng tôi ở trên, chẳng hạn, họ và tên được lưu trữ riêng biệt, nhưng getters và setters chứa logic sử dụng họ và tên để tạo tên đầy đủ
  • gỡ lỗi. Vì các phương thức của trình biến đổi có thể đóng gói bất kỳ mã nào, nên nó trở thành một nơi tuyệt vời để chặn khi gỡ lỗi [hoặc ghi nhật ký] mã của bạn. Ví dụ: bạn có thể ghi nhật ký hoặc kiểm tra mỗi khi giá trị của thuộc tính bị thay đổi

Python đạt được chức năng này với các bộ trang trí, là các phương thức đặc biệt được sử dụng để thay đổi hành vi của một hàm hoặc lớp khác. Để mô tả cách hoạt động của trình trang trí

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
0, chúng ta hãy xem một trình trang trí đơn giản hơn và cách hoạt động bên trong của nó

Trình trang trí đơn giản là một hàm lấy một hàm khác làm đối số và thêm vào hành vi của nó bằng cách bao bọc nó. Đây là một ví dụ đơn giản

Chạy mã này cung cấp cho bạn

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!

Như bạn có thể thấy, hàm

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
5 tự động tạo một hàm mới để trả về bằng cách sử dụng hàm đầu vào, thêm mã sẽ được thực thi trước và sau khi hàm ban đầu chạy

Trình trang trí

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
6 được triển khai với mẫu tương tự như hàm
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
7. Sử dụng cú pháp Python
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
1, nó nhận hàm được trang trí làm đối số, giống như trong ví dụ của tôi.
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
9

Vì vậy, quay trở lại ví dụ đầu tiên của tôi, mã này

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
2

Gần tương đương với cái này

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
3

Lưu ý rằng tôi đã thay đổi một số tên chức năng cho rõ ràng

Sau đó, sau này khi bạn muốn sử dụng

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
20 như chúng tôi làm trong ví dụ, bạn thực sự đang gọi là

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
5

Bây giờ đối tượng

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
21 mới này [một thể hiện của đối tượng
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
6] có cả phương thức getter và setter

Để sử dụng những thứ này với lớp của chúng ta,

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
23, đối tượng
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
6 hoạt động như một bộ mô tả, có nghĩa là nó có các phương thức __get__[], __set__[] và __delete__[] của riêng nó. Các phương thức
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
25 và
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
26 được kích hoạt trên một đối tượng khi một thuộc tính được truy xuất hoặc đặt và
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
27 được kích hoạt khi một thuộc tính bị xóa bằng
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
28

Vì vậy,

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
29 kích hoạt phương thức
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
26, được kế thừa từ
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
31. Điều này đưa chúng ta đến một điểm quan trọng - lớp của bạn phải kế thừa từ
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
31 để điều này hoạt động. Vì vậy, một lớp như thế này sẽ không thể sử dụng các thuộc tính setter vì nó không kế thừa từ
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
31

class Person[object]:
    def __init__[self, first_name, last_name]:
        self.first_name = first_name
        self.last_name = last_name

    @property
    def full_name[self]:
        return self.first_name + ' ' + self.last_name

    @full_name.setter
    def full_name[self, value]:
        first_name, last_name = value.split[' ']
        self.first_name = first_name
        self.last_name = last_name

    @full_name.deleter
    def full_name[self]:
        del self.first_name
        del self.last_name
9

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Nhờ có

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
6, các phương thức này hiện tương ứng với các phương thức
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
35 và
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
36 của chúng tôi ở trên

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
37 và
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
38 hiện được bao bọc bởi
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
39 và
$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
50, tương ứng

Và cuối cùng, những đối tượng mô tả này có thể được truy cập bằng cách chuyển một tham chiếu đến lớp của chúng ta,

$ python decorator.py
some_func[]:
Hey, you guys

some_func[] with decorator:
Before func!
Hey, you guys
After func!
23

Kiểu trả về của trình trang trí Python là gì?

Các công cụ trang trí trong Python rất mạnh có thể sửa đổi hành vi của một hàm mà không sửa đổi nó vĩnh viễn. Về cơ bản, nó bao hàm một hàm khác và vì cả hai hàm đều có thể gọi được, nên nó trả về một hàm có thể gọi được .

Ý nghĩa của @property trong Python là gì?

Người trang trí @property . Cú pháp của hàm này là. thuộc tính[fget=Không, fset=Không, fdel=Không, doc=Không]a built-in function that creates and returns a property object. The syntax of this function is: property[fget=None, fset=None, fdel=None, doc=None]

Điều gì là đúng về trang trí tài sản?

@property decorator là một công cụ trang trí tích hợp sẵn trong Python, hữu ích trong việc xác định các thuộc tính một cách dễ dàng mà không cần gọi thủ công hàm sẵn có property[]. Which is used to return the property attributes of a class from the stated getter, setter and deleter as parameters.

@property trong lớp Python là gì?

Trình trang trí @property trong python là trình trang trí tích hợp sẵn dưới hàm property[] . Phương thức property[] được sử dụng để định nghĩa các thuộc tính của lớp python. Cú pháp cơ bản của phương thức property[] là. property[fget, fset, fdel, doc] Trình trang trí @property trong python có thể được sử dụng để chỉ truy cập giá trị.

Chủ Đề