Tại sao chức năng là đối tượng trong python?

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

Chức năng cũng là một đối tượng trong Python?

Có, hàm python là đối tượng đầy đủ . Chúng có thể có các thuộc tính và phương thức như các đối tượng. Các hàm có thể có các biến dữ liệu và thậm chí các hàm được viết bên trong chúng.

Tại sao chức năng là một đối tượng?

Trong JavaScript, các hàm là đối tượng hạng nhất, vì chúng có thể có các thuộc tính và phương thức giống như bất kỳ đối tượng nào khác . Điều phân biệt chúng với các đối tượng khác là các hàm có thể được gọi. Tóm lại, chúng là các đối tượng Chức năng.

Hàm object[] trong Python là gì?

Hàm đối tượng Python[] . Bạn không thể thêm các thuộc tính hoặc phương thức mới vào đối tượng này. Đối tượng này là cơ sở cho tất cả các lớp, nó chứa các thuộc tính và phương thức dựng sẵn được mặc định cho tất cả các lớp. returns an empty object. You cannot add new properties or methods to this object. This object is the base for all classes, it holds the built-in properties and methods which are default for all classes.

Chức năng IS và đối tượng giống nhau?

Một đối tượng là tập hợp các hàm và dữ liệu. Hàm là tập hợp các lệnh và dữ liệu . Khi một loạt các chức năng hoạt động cùng nhau để thực hiện một tác vụ nhất định, chúng ta có thể gọi cộng đồng chức năng này là một đối tượng.

Chủ Đề