Hướng dẫn wrapper class python - lớp bao bọc trăn

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Cải thiện bài viết

    Lưu bài viết

    Đọc is a way to specify management code for functions and classes. Decorators themselves take the form of callable objects that process other callable objects. A Class Decorator is similar to function decorators, but they are run at the end of a class statement to rebind a class name to a callable [e.g functions]. As such, they can be used to either manage classes just after they are created or insert a layer of wrapper logic to manage instances when they are later created. Class decorator can be used to manage class object directly, instead of instance calls – to increase/modify a class with new methods. Class decorators are strongly related to function decorators, in fact, they use nearly the same syntax and very similar coding pattern but somewhere logic differs.

    Bàn luận For more information, refer to Decorators in Python

    Trang trí là một cách để chỉ định mã quản lý cho các chức năng và lớp học. Bản thân các nhà trang trí ở dạng các đối tượng có thể gọi được xử lý các đối tượng có thể gọi khác. Một người trang trí lớp tương tự như các nhà trang trí chức năng, nhưng chúng được chạy ở cuối một câu lệnh lớp để viết lại một tên lớp thành một có thể gọi được [ví dụ: các chức năng]. Do đó, chúng có thể được sử dụng để quản lý các lớp ngay sau khi chúng được tạo hoặc chèn một lớp logic bao bọc để quản lý các phiên bản khi chúng được tạo sau đó. Trình trang trí lớp có thể được sử dụng để quản lý trực tiếp đối tượng lớp, thay vì các cuộc gọi ví dụ - để tăng/sửa đổi một lớp bằng các phương thức mới. Các nhà trang trí lớp có liên quan mạnh mẽ đến các bộ trang trí chức năng, trên thực tế, họ sử dụng gần như cùng một cú pháp và mẫu mã hóa rất giống nhau nhưng ở đâu đó logic khác nhau.
    Syntactically, class decorators appear just before class statements.

    @decorator
    class Class_Name:       
          ...
    
    inst = Class_Name[50]
    
    This piece of code is equivalent to
    
    class Class_Name:
          ...
    
    Class_Name = decorator[Class_Name]
    inst = Class_Name[50];
    

    Lưu ý: Để biết thêm thông tin, hãy tham khảo các nhà trang trí trong Python

    Example:

    Cú pháp: Cú pháp, trang trí lớp xuất hiện ngay trước các tuyên bố của lớp.

    Hãy để hiểu về cú pháp và cách thức hoạt động của nó với một ví dụ:

    def scope_test[]:
        def do_local[]:
            spam = "local spam"
    
        def do_nonlocal[]:
            nonlocal spam
            spam = "nonlocal spam"
    
        def do_global[]:
            global spam
            spam = "global spam"
    
        spam = "test spam"
        do_local[]
        print["After local assignment:", spam]
        do_nonlocal[]
        print["After nonlocal assignment:", spam]
        do_global[]
        print["After global assignment:", spam]
    
    scope_test[]
    print["In global scope:", spam]
    
    8
    def scope_test[]:
        def do_local[]:
            spam = "local spam"
    
        def do_nonlocal[]:
            nonlocal spam
            spam = "nonlocal spam"
    
        def do_global[]:
            global spam
            spam = "global spam"
    
        spam = "test spam"
        do_local[]
        print["After local assignment:", spam]
        do_nonlocal[]
        print["After nonlocal assignment:", spam]
        do_global[]
        print["After global assignment:", spam]
    
    scope_test[]
    print["In global scope:", spam]
    
    9
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    0
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    1

    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    2
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    3
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    4

    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    5
    def scope_test[]:
        def do_local[]:
            spam = "local spam"
    
        def do_nonlocal[]:
            nonlocal spam
            spam = "nonlocal spam"
    
        def do_global[]:
            global spam
            spam = "global spam"
    
        spam = "test spam"
        do_local[]
        print["After local assignment:", spam]
        do_nonlocal[]
        print["After nonlocal assignment:", spam]
        do_global[]
        print["After global assignment:", spam]
    
    scope_test[]
    print["In global scope:", spam]
    
    8
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    7
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    8
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    9

    class ClassName:
        
        .
        .
        .
        
    
    0
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    8
    class ClassName:
        
        .
        .
        .
        
    
    2
    class ClassName:
        
        .
        .
        .
        
    
    3
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    0
    class ClassName:
        
        .
        .
        .
        
    
    5

    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    5
    def scope_test[]:
        def do_local[]:
            spam = "local spam"
    
        def do_nonlocal[]:
            nonlocal spam
            spam = "nonlocal spam"
    
        def do_global[]:
            global spam
            spam = "global spam"
    
        spam = "test spam"
        do_local[]
        print["After local assignment:", spam]
        do_nonlocal[]
        print["After nonlocal assignment:", spam]
        do_global[]
        print["After global assignment:", spam]
    
    scope_test[]
    print["In global scope:", spam]
    
    8
    class ClassName:
        
        .
        .
        .
        
    
    8
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    8
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    1

    class MyClass:
        """A simple example class"""
        i = 12345
    
        def f[self]:
            return 'hello world'
    
    8

    class ClassName:
        
        .
        .
        .
        
    
    0
    class MyClass:
        """A simple example class"""
        i = 12345
    
        def f[self]:
            return 'hello world'
    
    2
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    8
    class MyClass:
        """A simple example class"""
        i = 12345
    
        def f[self]:
            return 'hello world'
    
    4

    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    2
    class MyClass:
        """A simple example class"""
        i = 12345
    
        def f[self]:
            return 'hello world'
    
    2
    class MyClass:
        """A simple example class"""
        i = 12345
    
        def f[self]:
            return 'hello world'
    
    7

    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    3
    def __init__[self]:
        self.data = []
    
    0

    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    2
    def scope_test[]:
        def do_local[]:
            spam = "local spam"
    
        def do_nonlocal[]:
            nonlocal spam
            spam = "nonlocal spam"
    
        def do_global[]:
            global spam
            spam = "global spam"
    
        spam = "test spam"
        do_local[]
        print["After local assignment:", spam]
        do_nonlocal[]
        print["After nonlocal assignment:", spam]
        do_global[]
        print["After global assignment:", spam]
    
    scope_test[]
    print["In global scope:", spam]
    
    8
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    7
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    8
    def __init__[self]:
        self.data = []
    
    5

    >>> class Complex:
    ...     def __init__[self, realpart, imagpart]:
    ...         self.r = realpart
    ...         self.i = imagpart
    ...
    >>> x = Complex[3.0, -4.5]
    >>> x.r, x.i
    [3.0, -4.5]
    
    6
    >>> class Complex:
    ...     def __init__[self, realpart, imagpart]:
    ...         self.r = realpart
    ...         self.i = imagpart
    ...
    >>> x = Complex[3.0, -4.5]
    >>> x.r, x.i
    [3.0, -4.5]
    
    7

    OUTPUT:

    Geeks
    

    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    5
    After local assignment: test spam
    After nonlocal assignment: nonlocal spam
    After global assignment: nonlocal spam
    In global scope: global spam
    
    8
    def __init__[self]:
        self.data = []
    
    8
    class ClassName:
        
        .
        .
        .
        
    
    3
    >>> class Complex:
    ...     def __init__[self, realpart, imagpart]:
    ...         self.r = realpart
    ...         self.i = imagpart
    ...
    >>> x = Complex[3.0, -4.5]
    >>> x.r, x.i
    [3.0, -4.5]
    
    0

    >>> class Complex:
    ...     def __init__[self, realpart, imagpart]:
    ...         self.r = realpart
    ...         self.i = imagpart
    ...
    >>> x = Complex[3.0, -4.5]
    >>> x.r, x.i
    [3.0, -4.5]
    
    1
    class ClassName:
        
        .
        .
        .
        
    
    3
    >>> class Complex:
    ...     def __init__[self, realpart, imagpart]:
    ...         self.r = realpart
    ...         self.i = imagpart
    ...
    >>> x = Complex[3.0, -4.5]
    >>> x.r, x.i
    [3.0, -4.5]
    
    3
    >>> class Complex:
    ...     def __init__[self, realpart, imagpart]:
    ...         self.r = realpart
    ...         self.i = imagpart
    ...
    >>> x = Complex[3.0, -4.5]
    >>> x.r, x.i
    [3.0, -4.5]
    
    4
    >>> class Complex:
    ...     def __init__[self, realpart, imagpart]:
    ...         self.r = realpart
    ...         self.i = imagpart
    ...
    >>> x = Complex[3.0, -4.5]
    >>> x.r, x.i
    [3.0, -4.5]
    
    5

    Các lớp cung cấp một phương tiện của dữ liệu bó và chức năng cùng nhau. Tạo một lớp mới tạo ra một loại đối tượng mới, cho phép các phiên bản mới của loại đó được thực hiện. Mỗi phiên bản lớp có thể có các thuộc tính được gắn vào nó để duy trì trạng thái của nó. Các phiên bản lớp cũng có thể có các phương thức [được xác định bởi lớp của nó] để sửa đổi trạng thái của nó.

    So với các ngôn ngữ lập trình khác, cơ chế lớp Python, bổ sung các lớp có tối thiểu cú pháp mới và ngữ nghĩa. Nó là một hỗn hợp của các cơ chế lớp được tìm thấy trong C ++ và Modula-3. Các lớp Python cung cấp tất cả các tính năng tiêu chuẩn của lập trình hướng đối tượng: Cơ chế kế thừa lớp cho phép nhiều lớp cơ sở, một lớp dẫn xuất có thể ghi đè bất kỳ phương thức nào của lớp cơ sở hoặc lớp của nó và một phương thức có thể gọi phương thức của một lớp cơ sở có cùng tên . Các đối tượng có thể chứa số lượng và loại dữ liệu tùy ý. Là đúng với các mô -đun, các lớp chia tay bản chất động của Python: chúng được tạo ra trong thời gian chạy và có thể được sửa đổi hơn nữa sau khi tạo.

    Trong thuật ngữ C ++, thông thường các thành viên lớp [bao gồm các thành viên dữ liệu] là công khai [ngoại trừ xem bên dưới các biến riêng tư] và tất cả các hàm thành viên là ảo. Như trong Modula-3, không có chữ viết tắt nào để tham khảo các thành viên của đối tượng từ các phương thức của nó: hàm phương thức được khai báo với một đối số đầu tiên rõ ràng đại diện cho đối tượng, được cung cấp hoàn toàn bởi cuộc gọi. Như trong Smalltalk, bản thân các lớp là đối tượng. Điều này cung cấp ngữ nghĩa để nhập khẩu và đổi tên. Không giống như C ++ và Modula-3, các loại tích hợp có thể được sử dụng làm lớp cơ sở để mở rộng bởi người dùng. Ngoài ra, giống như trong C ++, hầu hết các toán tử tích hợp với cú pháp đặc biệt [toán tử số học, đăng ký, v.v.] có thể được xác định lại cho các trường hợp lớp.Private Variables], and all member functions are virtual. As in Modula-3, there are no shorthands for referencing the object’s members from its methods: the method function is declared with an explicit first argument representing the object, which is provided implicitly by the call. As in Smalltalk, classes themselves are objects. This provides semantics for importing and renaming. Unlike C++ and Modula-3, built-in types can be used as base classes for extension by the user. Also, like in C++, most built-in operators with special syntax [arithmetic operators, subscripting etc.] can be redefined for class instances.

    . đã nghe nói về nó.]

    9.1. Một từ về tên và đối tượngA Word About Names and Objects¶

    Các đối tượng có tính cá nhân và nhiều tên [trong nhiều phạm vi] có thể được liên kết với cùng một đối tượng. Điều này được gọi là bí danh trong các ngôn ngữ khác. Điều này thường không được đánh giá cao trong cái nhìn đầu tiên tại Python và có thể bị bỏ qua một cách an toàn khi xử lý các loại cơ bản bất biến [số, chuỗi, bộ dữ liệu]. Tuy nhiên, bí danh có tác dụng đáng ngạc nhiên đối với ngữ nghĩa của mã Python liên quan đến các đối tượng có thể thay đổi như danh sách, từ điển và hầu hết các loại khác. Điều này thường được sử dụng cho lợi ích của chương trình, vì các bí danh hoạt động như con trỏ ở một số khía cạnh. Ví dụ, việc chuyển một đối tượng là rẻ vì chỉ có một con trỏ được thông qua khi thực hiện; Và nếu một hàm sửa đổi một đối tượng được truyền như một đối số, người gọi sẽ thấy sự thay đổi - điều này sẽ loại bỏ sự cần thiết của hai cơ chế truyền đối số khác nhau như trong Pascal.

    9.2. Phạm vi Python và không gian tênPython Scopes and Namespaces¶

    Trước khi giới thiệu các lớp học, trước tiên tôi phải nói với bạn điều gì đó về các quy tắc phạm vi Python. Các định nghĩa của lớp chơi một số thủ thuật gọn gàng với không gian tên và bạn cần biết cách phạm vi và không gian tên hoạt động để hiểu đầy đủ những gì xảy ra. Ngẫu nhiên, kiến ​​thức về chủ đề này rất hữu ích cho bất kỳ lập trình viên Python tiên tiến nào.

    Hãy bắt đầu với một số định nghĩa.

    Một không gian tên là một ánh xạ từ tên đến các đối tượng. Hầu hết các không gian tên hiện đang được triển khai dưới dạng từ điển Python, nhưng điều đó thường không đáng chú ý theo bất kỳ cách nào [ngoại trừ hiệu suất] và nó có thể thay đổi trong tương lai. Ví dụ về các không gian tên là: tập hợp các tên tích hợp [chứa các hàm như

    x.counter = 1
    while x.counter 

    Bài Viết Liên Quan

    Chủ Đề