Phương pháp kỳ diệu để tạo một con trăn thể hiện là gì?

Tóm lược. trong hướng dẫn này, bạn sẽ học cách sử dụng phương thức

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
1 của Python để tạo biểu diễn chuỗi của một lớp

Giới thiệu về phương thức

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
1 của Python

Hãy bắt đầu với lớp

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
3

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

Code language: Python [python]

Lớp

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
3 có ba thuộc tính thể hiện bao gồm

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
0,

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
1 và

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
2

Sau đây tạo một thể hiện mới của lớp

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
3 và hiển thị nó

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]

đầu ra

Code language: Python [python]

Khi bạn sử dụng hàm

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
4 để hiển thị thể hiện của lớp

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
3, hàm

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
4 sẽ hiển thị địa chỉ bộ nhớ của thể hiện đó

Đôi khi, thật hữu ích khi có một chuỗi đại diện cho một thể hiện của một lớp. Để tùy chỉnh biểu diễn chuỗi của một thể hiện lớp, lớp cần triển khai phương thức ma thuật

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
1

Trong nội bộ, Python sẽ tự động gọi phương thức

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
1 khi một cá thể gọi phương thức

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
9

Lưu ý rằng hàm

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
4 chuyển đổi tất cả các đối số không phải từ khóa thành chuỗi bằng cách chuyển chúng tới

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
9 trước khi hiển thị giá trị chuỗi

Sau đây minh họa cách triển khai phương thức

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
1 trong lớp

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
3

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
1

Và khi bạn sử dụng hàm

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
4 để in ra một thể hiện của lớp

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
3, Python sẽ gọi phương thức

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
1 được định nghĩa trong lớp

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
3. Ví dụ

Python là ngôn ngữ hướng đối tượng, mọi thứ đều là đối tượng trong python. Python đang có loại phương thức đặc biệt được gọi là phương thức ma thuật được đặt tên với dấu gạch dưới kép ở trước và ở cuối

Khi chúng ta nói về phương pháp ma thuật __new__, chúng ta cũng cần nói về __init__

Các phương thức này sẽ được gọi khi bạn khởi tạo [Quá trình tạo thể hiện từ lớp được gọi là khởi tạo]. Đó là khi bạn tạo ví dụ. Phương thức ma thuật __new__ sẽ được gọi khi cá thể được tạo. Sử dụng phương pháp này, bạn có thể tùy chỉnh việc tạo cá thể. Đây chỉ là phương thức sẽ được gọi đầu tiên sau đó __init__ sẽ được gọi để khởi tạo thể hiện khi bạn đang tạo thể hiện

Phương thức __new__ sẽ lấy tham chiếu lớp làm đối số đầu tiên, theo sau là các đối số được truyền cho hàm tạo [Các đối số được truyền cho lệnh gọi của lớp để tạo cá thể]. Phương thức __new__ chịu trách nhiệm tạo đối tượng, vì vậy bạn có thể sử dụng phương thức này để tùy chỉnh việc tạo đối tượng. Thông thường, phương thức __new__ sẽ trả về tham chiếu đối tượng thể hiện đã tạo. Phương thức __init__ sẽ được gọi sau khi phương thức __new__ hoàn thành thực thi

Bạn có thể tạo thể hiện mới của lớp bằng cách gọi phương thức __new__ của lớp cha bằng super. Một cái gì đó như super[currentclass, cls]. __new__[cls, [,…. ]]

Khai báo và khởi tạo lớp thông thường

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
3

Việc triển khai lớp với phương thức __new__ bị ghi đè

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
4

đầu ra

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
5

Ghi chú

Bạn có thể tạo phiên bản bên trong phương thức __new__  bằng cách sử dụng siêu hàm hoặc bằng cách gọi trực tiếp phương thức __new__ trên đối tượng  Nếu lớp cha mẹ là đối tượng. Đó là,

instance = super[MyClass, cls]. __new__[cls, *args, **kwargs]

hoặc

ví dụ = đối tượng. __new__[cls, *args, **kwargs]

Những điều cần ghi nhớ

Nếu __new__ trả về phiên bản của lớp của chính nó, thì phương thức __init__ của phiên bản mới được tạo sẽ được gọi với phiên bản đầu tiên [như __init__[self, [, …. ]] đối số theo sau bởi các đối số được chuyển đến __new__ hoặc lệnh gọi của lớp. Vì vậy, __init__ sẽ được gọi ngầm

Nếu phương thức __new__ trả về một thứ khác không phải là thể hiện của lớp, thì thể hiện của phương thức __init__ sẽ không được gọi. Trong trường hợp này, bạn phải tự gọi phương thức __init__

Các ứng dụng

Thông thường, việc ghi đè phương thức __new__ là không bình thường, nhưng đôi khi nó là bắt buộc nếu bạn đang viết API hoặc tùy chỉnh việc tạo lớp hoặc cá thể hoặc trừu tượng hóa thứ gì đó bằng cách sử dụng các lớp

Độc thân sử dụng __new__

Bạn có thể triển khai mẫu thiết kế singleton bằng phương thức __new__. Trong đó lớp singleton là một lớp chỉ có thể có một đối tượng. Đó là, thể hiện của lớp

Đây là cách bạn có thể hạn chế tạo nhiều phiên bản bằng cách ghi đè __new__

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
6

Nó không giới hạn ở singleton. Bạn cũng có thể áp đặt giới hạn cho tổng số phiên bản đã tạo

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
7

 

Tùy chỉnh đối tượng Instance

Bạn có thể tùy chỉnh phiên bản đã tạo và thực hiện một số thao tác trên phiên bản đó trước khi trình khởi tạo __init__  được gọi. Ngoài ra, bạn có thể áp đặt hạn chế đối với việc tạo phiên bản dựa trên một số ràng buộc

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
8

 

Tùy chỉnh đối tượng được trả về

Thông thường khi bạn khởi tạo lớp, nó sẽ trả về thể hiện của lớp đó. Bạn có thể tùy chỉnh hành vi này và bạn có thể trả lại một số đối tượng ngẫu nhiên mà bạn muốn

Sau đây là một ví dụ đơn giản để chứng minh rằng việc trả về đối tượng ngẫu nhiên không phải là thể hiện của lớp

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
9

đầu ra

person = Person['John', 'Doe', 25] print[person]

Code language: Python [python]
0

Ở đây, bạn có thể thấy khi chúng tôi khởi tạo lớp, nó trả về 3 thay vì tham chiếu phiên bản. Bởi vì chúng tôi đang trả về 3 thay vì phiên bản đã tạo từ phương thức __new__. Chúng tôi đang gọi __init__ một cách rõ ràng. Như tôi đã đề cập ở trên, chúng ta phải gọi __init__ một cách rõ ràng nếu chúng ta không trả về đối tượng thể hiện từ phương thức __new__

Phương thức __new__ cũng được sử dụng cùng với siêu lớp để tùy chỉnh việc tạo lớp

Phần kết luận

Có nhiều khả năng về cách bạn có thể sử dụng tính năng này. Hầu như không phải lúc nào cũng cần ghi đè phương thức __new__ trừ khi bạn đang làm gì đó liên quan đến việc tạo cá thể

Đơn giản tốt hơn phức tạp. Cố gắng làm cho cuộc sống dễ dàng hơn, chỉ sử dụng phương pháp này nếu cần sử dụng

Phương pháp kỳ diệu để tạo một thể hiện là gì?

Cái đầu tiên là __new__ , và nó là một hàm tạo được gọi tự động khi bạn tạo một thể hiện của một lớp. Hàm tạo là một phương thức chịu trách nhiệm tạo một thể hiện của một lớp. Nó không phải là cách dễ làm việc nhất, nhưng cho phép bạn kiểm soát việc tạo lớp.

Phương pháp ma thuật trong Python là gì?

Các phương thức ma thuật trong Python là các phương thức đặc biệt bắt đầu và kết thúc bằng dấu gạch dưới kép . Chúng còn được gọi là phương pháp dunder. Các phương thức ma thuật không có nghĩa là bạn phải gọi trực tiếp, nhưng việc gọi xảy ra bên trong lớp trên một hành động nhất định.

Phương pháp ma thuật là gì?

Các phương thức ma thuật là các phương thức đặc biệt ghi đè hành động mặc định của PHP khi một số hành động nhất định được thực hiện trên một đối tượng. thận trọng. Tất cả các tên phương thức bắt đầu bằng __ được dành riêng bởi PHP. Do đó, không nên sử dụng các tên phương thức như vậy trừ khi ghi đè hành vi của PHP

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

Theo tài liệu chính thức của Python, __new__ được sử dụng khi bạn cần kiểm soát việc tạo phiên bản mới trong khi __init__ được sử dụng để kiểm soát .

Chủ Đề