Tại sao Python không phải là đối tượng

Hãy nói về cách các tác giả thư viện bên thứ ba sử dụng các phương thức dunder để làm cho các đối tượng Python của họ giống như các đối tượng Python gốc

Quá tải toán tử trong Python sử dụng các phương thức dunder

Hãy thêm hai biến,

>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
7 và
>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
8

Khi Python thực thi đoạn mã này, nó gọi phương thức

>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
9 trên
>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
7, chuyển nó sang
>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
8

Phương thức

>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
9 được phát âm là "dunder add", dunder như trong dấu gạch dưới kép vì nó bắt đầu và kết thúc bằng hai dấu gạch dưới

Nếu chúng ta tìm kiếm trợ giúp trên

>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
7 [chỉ đến một số nguyên], chúng ta sẽ thấy có rất nhiều phương thức dunder [tất cả các phương thức đó đều có tên là
>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
2]

>>> help[x]
Help on int object:

class int[object]
 | ...
 |
 |  Methods defined here:
 |
 |  __abs__[self, /]
 |      abs[self]
 |
 |  __add__[self, value, /]
 |      Return self+value.
 |
 |  __and__[self, value, /]
 |      Return self&value.
 |
 |  __bool__[self, /]
 |      self != 0
 |
 | ...

Phương thức dunder hoạt động như một hợp đồng giữa trình thông dịch Python và người tạo ra một lớp Python cụ thể

Người đã tạo ra lớp

>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
3 đã định nghĩa phương thức
>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
9 để cho Python biết rằng ký hiệu
>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
5 hoạt động trên các đối tượng
>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
3

Phép cộng dựa vào một phương thức dunder, nhưng nhiều thao tác khác cũng vậy. Trên thực tế, khi bạn cố gắng hỏi liệu hai thứ có bằng nhau hay không, hãy sử dụng phương pháp

>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
7. Thậm chí dựa vào các phương thức dunder trong Python

Gọi thủ công các phương thức dunder

Các phương thức của Dunder là một hợp đồng giữa người tạo ra lớp và chính Python. Là lập trình viên Python, chúng ta không nên gọi trực tiếp các phương thức dunder. Thay vào đó, chúng tôi dự định sử dụng các phép toán cấp cao [như toán tử

>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
5 và
>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
9] dựa trên các phương thức dunder đó

Hãy xem một ví dụ về lý do tại sao chúng ta không nên gọi trực tiếp các phương thức dunder

Nếu chúng tôi kiểm tra sự bằng nhau giữa một số nguyên và một số dấu phẩy động bằng cách gọi thủ công

>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
7, chúng tôi sẽ thấy
>>> name = "Trey"
>>> len[name]
4
1

>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented

>>> name = "Trey"
>>> len[name]
4
1 là một giá trị đặc biệt cho Python biết, là một số nguyên, tôi không biết cách tự kiểm tra sự bằng nhau với một số dấu phẩy động

Vì vậy, Python sau đó phải hỏi

>>> name = "Trey"
>>> len[name]
4
3, số dấu phẩy động, "bạn có bằng số nguyên
>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
8 không?"

Nó nói

>>> name = "Trey"
>>> len[name]
4
5

Đó là lý do

>>> name = "Trey"
>>> len[name]
4
6 thực sự hoạt động

Chúng ta phải làm những việc [như kiểm tra đẳng thức ở đây], sử dụng toán tử

>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
9. Chúng tôi không được phép sử dụng trực tiếp các phương pháp dunder. Công việc của Python là gọi các phương thức dunder;

Các phương thức Dunder cung cấp năng lượng cho một số chức năng tích hợp

Các phương thức Dunder trong toán tử nguồn Python như ________ 05, ________ 99, ________ 180 và ________ 09. Họ cũng cung cấp năng lượng cho một số chức năng tích hợp

Ví dụ, nếu bạn hỏi độ dài của một cái gì đó

>>> name = "Trey"
>>> len[name]
4

Điều đó dựa trên phương pháp

>>> help[x]
Help on int object:

class int[object]
 | ...
 |
 |  Methods defined here:
 |
 |  __abs__[self, /]
 |      abs[self]
 |
 |  __add__[self, value, /]
 |      Return self+value.
 |
 |  __and__[self, value, /]
 |      Return self&value.
 |
 |  __bool__[self, /]
 |      self != 0
 |
 | ...
82

Hàm

>>> help[x]
Help on int object:

class int[object]
 | ...
 |
 |  Methods defined here:
 |
 |  __abs__[self, /]
 |      abs[self]
 |
 |  __add__[self, value, /]
 |      Return self+value.
 |
 |  __and__[self, value, /]
 |      Return self&value.
 |
 |  __bool__[self, /]
 |      self != 0
 |
 | ...
83 là một hàm tích hợp [trái ngược với một phương thức] vì Python đã quyết định rằng độ dài là một thuộc tính khá cơ bản của một đối tượng. Vì vậy, Python có một hàm tích hợp được gọi là ủy quyền cho một phương thức dunder được sử dụng để khám phá xem thứ gì đó có độ dài hay không và độ dài đó là bao nhiêu

Có độ dài là tất cả về việc có một phương pháp

>>> help[x]
Help on int object:

class int[object]
 | ...
 |
 |  Methods defined here:
 |
 |  __abs__[self, /]
 |      abs[self]
 |
 |  __add__[self, value, /]
 |      Return self+value.
 |
 |  __and__[self, value, /]
 |      Return self&value.
 |
 |  __bool__[self, /]
 |      self != 0
 |
 | ...
82

>>> help[x]
Help on int object:

class int[object]
 | ...
 |
 |  Methods defined here:
 |
 |  __abs__[self, /]
 |      abs[self]
 |
 |  __add__[self, value, /]
 |      Return self+value.
 |
 |  __and__[self, value, /]
 |      Return self&value.
 |
 |  __bool__[self, /]
 |      self != 0
 |
 | ...
8

Trên thực tế, nhiều thứ dường như hoàn toàn cơ bản đối với Python, chẳng hạn như lập chỉ mục một danh sách, được hỗ trợ bởi các phương thức dunder

Bất cứ khi nào bạn sử dụng dấu ngoặc vuông trên một đối tượng trong Python, phương thức

>>> help[x]
Help on int object:

class int[object]
 | ...
 |
 |  Methods defined here:
 |
 |  __abs__[self, /]
 |      abs[self]
 |
 |  __add__[self, value, /]
 |      Return self+value.
 |
 |  __and__[self, value, /]
 |      Return self&value.
 |
 |  __bool__[self, /]
 |      self != 0
 |
 | ...
86 được gọi

>>> y = 3
>>> z = 3.0
>>> y.__eq__[z]
NotImplemented
6

Bạn có thể sử dụng các phương thức dunder để quá tải toán tử

Vì vậy, các phương thức lộn xộn, cung cấp năng lượng khá nhiều cho tất cả các toán tử trong Python và thậm chí một số hàm tích hợp sẵn

Phương thức dunder là một phương thức [mà Python biết], có hai dấu gạch dưới trước nó và hai dấu gạch dưới sau nó

Đó là một hợp đồng giữa người đã triển khai một lớp nhất định và trình thông dịch Python, biết khi nào nên gọi phương thức dunder cụ thể đó

Nếu bạn tạo các lớp của riêng mình bằng Python, bạn có thể sử dụng các phương thức dunder để nạp chồng toán tử. Và đó thực sự là điều mà các tác giả thư viện bên thứ ba làm, để làm cho các đối tượng trong thư viện của họ hoạt động giống như các đối tượng Python gốc

Tại sao Python không hướng đối tượng?

Python hỗ trợ tất cả khái niệm "lập trình hướng đối tượng" nhưng nó KHÔNG hoàn toàn hướng đối tượng bởi vì - Mã trong Python cũng có thể được viết mà không cần tạo lớp.

Python có phải là một đối tượng không?

Python là ngôn ngữ lập trình hướng đối tượng. Hầu hết mọi thứ trong Python đều là đối tượng , với các thuộc tính và phương thức của nó. Lớp giống như một hàm tạo đối tượng hoặc "bản thiết kế" để tạo đối tượng.

Điều gì trong Python không phải là một đối tượng?

Mọi thứ trong Python đều là đối tượng . Và “kiểu” là lớp duy nhất là một thể hiện của chính nó.

Python có thực sự hướng đối tượng không?

Python, giống như mọi ngôn ngữ hướng đối tượng khác , cho phép bạn định nghĩa các lớp để tạo đối tượng. Các lớp Python dựng sẵn là các kiểu dữ liệu phổ biến nhất trong Python, chẳng hạn như chuỗi, danh sách, từ điển, v.v. Một lớp là một tập hợp các biến thể hiện và các phương thức liên quan xác định một loại đối tượng cụ thể.

Chủ Đề