Việc sử dụng __ mới __ trong Python là gì?

Trường hợp sử dụng chủ yếu cho 
class Singleton[object]:
    _instance = None  # Keep instance reference 
    
    def __new__[cls, *args, **kwargs]:
        if not cls._instance:
            cls._instance = object.__new__[cls, *args, **kwargs]
        return cls._instance
7 là trong siêu dữ liệu. Siêu lớp đủ phức tạp để xứng đáng với bài viết của riêng chúng, vì vậy tôi không đề cập đến chúng ở đây. Nếu bạn đã hiểu về siêu dữ liệu, thật tuyệt. Nếu không, đừng lo lắng;

Xin chào các chuyên viên máy tính và chào mừng trong bài viết hôm nay, chúng tôi sẽ đề cập đến Python mới. Cùng với đó, chúng ta sẽ xem xét định nghĩa và ứng dụng của phương pháp này. Chúng tôi sẽ làm tất cả điều đó với sự giúp đỡ của các ví dụ. Như chúng ta biết rằng python là một ngôn ngữ lập trình cấp cao. Với sự trợ giúp của nó, chúng ta cũng có thể lập trình hướng đối tượng. Trong Python, có một số phương thức đặc biệt được gọi là phương thức ma thuật hoặc phương thức gạch dưới kép. Chúng là những phương thức được sử dụng phổ biến trong nạp chồng toán tử. Nó có thể được hiểu là một điều kiện trong đó các toán tử khác nhau có cách triển khai khác nhau tùy thuộc vào đối số của chúng

Một điều khác phân biệt phương pháp ma thuật với phương pháp thông thường là chúng có các hậu tố và tiền tố của dấu gạch dưới kép xung quanh chúng. Giống như __new__ , __add__, __init__ và v.v. Trong bài viết này, chúng tôi sẽ chủ yếu tập trung vào phương pháp ma thuật __new__. Hơn nữa trong bài viết này, tôi sẽ sử dụng new thay vì __new__

nội dung

Phương thức __new__ của Python và cú pháp của nó

Trong phần này, chúng ta sẽ cố gắng hiểu phương pháp mới thực sự là gì. Cùng với đó, chúng ta cũng sẽ xem xét cú pháp của nó. Để phát triển một sự hiểu biết đầy đủ về phương pháp này

Trong lập trình hướng đối tượng bất cứ khi nào một lớp đã khởi tạo phương thức new được gọi. Phương thức mới được gọi khi một đối tượng được tạo và là một phương thức tĩnh. Một tham số cls. cls được yêu cầu để đi qua nó. Tại thời điểm khởi tạo, trình biên dịch sẽ tự lo liệu. Tiếp theo, chúng ta hãy xem cú pháp của phương thức này

cú pháp

class class_name:
    def __new__[cls, *args, **kwargs]:
        print[]
        return super[class_name, cls].__new__[cls, *args, **kwargs]

Đây là cú pháp chung của phương pháp mới. Ở đây chúng ta đã sử dụng super với câu lệnh return. Chúng tôi sử dụng nó vì nó trả về một đối tượng tạm thời và cho phép chúng tôi truy cập các phương thức của lớp cơ sở. Trong phần tiếp theo, chúng ta hãy xem xét một số ví dụ liên quan đến nó

Ví dụ về Python __new__

class A[object]: 
    def __new__[cls]: 
         print["EXAMPLE-1"] 
         return super[A, cls].__new__[cls] 
  
A[]

đầu ra

EXAMPLE-1

Ở trên, chúng ta có thể thấy ví dụ đầu tiên liên quan đến phương thức mới. Ở đây chúng tôi đã không làm gì lạ mắt và động cơ duy nhất là thực hiện đúng cú pháp. Ở đây chúng tôi đã xác định một đối tượng. Bên trong nó, chúng ta đã định nghĩa một lớp mới. Sau đó, chúng tôi đã sử dụng một bản in đơn giản và trả lại siêu. Cuối cùng, chúng ta chỉ cần gọi đối tượng

import math
class A[object]: 
    def __new__[cls]: 
         a=input["enter the number"]
         b=input["enter the number"]
         c=int[a]+int[b]
         print[c]
         
         return super[A, cls].__new__[cls] 
  
A[]

đầu ra

enter the number 7
enter the number 9
16

Trong ví dụ này, chúng ta đã thực hiện phép cộng 2 số. Ở đây chúng tôi đã lấy đầu vào từ người dùng. Phần còn lại, chúng tôi vừa làm theo cú pháp liên quan. Từ 2 ví dụ đã thảo luận ở trên, chúng ta có thể kết luận rằng phương thức mới được gọi tự động. Cũng như câu lệnh return super nên được sử dụng khi xử lý các phương thức ma thuật

Sự khác biệt giữa các phương thức ma thuật __new__ và __init__ của Python

Cho đến nay trong bài viết này, chúng tôi đã thảo luận về phương pháp ma thuật mới. Phương thức __int__ cũng được tự động thêm vào khi một lớp được khởi tạo. Ở đây, sự khác biệt giữa 2 là phương thức init được sử dụng để khởi tạo đối tượng. Ngoài ra, khi cả hai phương thức đều có mặt trong trường hợp đó, lần đầu tiên việc thực thi phương thức mới diễn ra. Sau đó, quyết định có sử dụng phương thức init hay không. Hãy để chúng tôi xem một ví dụ liên quan đến cả hai phương pháp sẽ làm cho mọi thứ rõ ràng hơn rất nhiều đối với chúng tôi

class A[object]: 
    def __new__[cls]: 
         print["New method"] 
         return super[A, cls].__new__[cls] 
  
    def __init__[self]: 
        print["Init method "] 
  
A[] 

đầu ra

New method
Init method 

Ở trên chúng ta có thể thấy một ví dụ đơn giản liên quan đến cả hai phương pháp. Từ điều này, chúng ta có thể quan sát một điều khác đó là cái mới được gọi tự động. Trong khi đối với init, nó sẽ được gọi mọi lúc trong trường hợp đó

Python __new__ với các đối số

Từ con trăn 2. 6, các nhà phát triển đã bỏ qua các đối số bổ sung từ đối tượng. phương thức __new__. Điều này áp dụng cho tất cả các phiên bản python >2. 6. Hơn nữa, từ python 3. 2, nó báo lỗi bằng cách truyền đối số trong python __new__

Xem thêm

  • khởi tạo Python. __init__ trong Python có phải là Trình xây dựng không?
  • Các cách để đạt được nhiều hàm tạo trong Python
  • Phân vùng đối số NumPy[]. Giải thích với các ví dụ
  • Đạp xe xung quanh với Phông chữ Matplotlib
  • Các lớp lồng nhau trong Python được giải thích bằng các ví dụ

Phần kết luận

Trong bài viết này, chúng tôi đã đề cập đến Python __new__. Chúng tôi đã đề cập đến một phương thức Magical, được gọi tự động bất cứ khi nào lớp được khởi tạo. Chúng tôi cũng đề cập đến định nghĩa và cú pháp của nó. Để hiểu đúng vấn đề, chúng tôi đã xem xét một vài ví dụ. Cuối cùng, chúng tôi cũng so sánh nó với một chức năng khác có tên là init

Tôi hy vọng bài viết này có thể xóa tan mọi nghi ngờ. Nhưng trong trường hợp bạn có bất kỳ câu hỏi nào chưa được giải quyết, vui lòng viết chúng bên dưới trong phần bình luận. Đọc xong cái này, tại sao không đọc về allclose tiếp theo

__ mới __ trong Python là gì?

Python __new__[] là phương thức khởi tạo kiểm soát việc tạo phiên bản mới . Nó được gọi đầu tiên và nó trả về một thể hiện của lớp mới. Python __init__[] là phương thức khởi tạo để thiết lập các thuộc tính [i. e. , trạng thái] của phiên bản mới được tạo. Nó được gọi sau khi tạo và không trả về gì cả, tôi. e. , Không có.

__ mới __ nên trả lại cái gì?

__new__ trả về một thể hiện của lớp . __init__ nhận các thể hiện của lớp được trả về bởi __new__. Sử dụng __init__ để khởi tạo giá trị.

__ mới __ có phải là một phương thức lớp không?

Trong đối tượng lớp cơ sở, phương thức __new__ được định nghĩa là phương thức tĩnh yêu cầu truyền tham số cls. cls đại diện cho lớp cần được khởi tạo và trình biên dịch sẽ tự động cung cấp tham số này tại thời điểm khởi tạo.

__ __ phương thức trong Python là gì?

Các phương thức này cung cấp các tính năng cú pháp đặc biệt hoặc làm những việc đặc biệt . Ví dụ: __file__ cho biết vị trí của tệp Python, __eq__ được thực thi khi biểu thức == b được thực thi.

Chủ Đề