Hướng dẫn why in python everything is an object? - tại sao trong python mọi thứ đều là một đối tượng?

Đăng nhập vào tài khoản Python Barsels của bạn để lưu cài đặt screencast của bạn.

Vẫn chưa có tài khoản? Đăng ký tại đây.

Hãy nói về cách các tác giả thư viện của 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ọ cảm thấy như các đối tượng Python bản địa.dunder methods to make their Python objects feel like native Python objects.

Người vận hành quá tải trong Python sử dụng các phương thức Dunder

Hãy thêm hai biến, xy:

>>> x = 2
>>> y = 3
>>> x + y
5

Khi Python thực thi mã này, nó đã gọi phương thức __add__ trên x, vượt qua nó y:

Phương pháp __add__ được phát âm là "Dunder ADD", Dunder như trong Double Undercore vì nó bắt đầu và kết thúc bằng hai dấu gạch dưới.double underscore because it starts and ends with two underscores.

Nếu chúng ta tìm kiếm sự giúp đỡ trên x (chỉ vào 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 pháp có tên

>>> 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
 |
 | ...
3):

>>> 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
 |
 | ...

Một phương pháp Dunder hoạt động như một hợp đồng giữa thông dịch viên Python và người đã tạo ra một lớp Python cụ thể.dunder method acts as a contract between the Python interpreter and the person who made a particular Python class.

Người đã tạo ra lớ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
 |
 | ...
4 đã xác định phương thức __add__ để cho Python biết rằng biểu tượng
>>> 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
 |
 | ...
6 hoạt động trên các đối tượng
>>> 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
 |
 | ...
4.

Bổ sung phụ thuộc vào một phương pháp dunder, nhưng nhiều hoạt động khác cũng vậy. Trong thực tế, khi bạn cố gắng hỏi liệu hai điều có bình đẳng không, điều đó sử dụng 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
 |
 | ...
8. Ngay cả bình đẳng cũng dựa vào các phương pháp dunder trong Python!

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

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

>>> 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
 |
 | ...
6 và
>>> y = 3
>>> z = 3.0
>>> y.__eq__(z)
NotImplemented
0) dựa vào các phương thức Dunder đó.not supposed to call dunder methods directly. Instead, we're meant to use the high-level operations (like the
>>> 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
 |
 | ...
6 and
>>> y = 3
>>> z = 3.0
>>> y.__eq__(z)
NotImplemented
0 operators) that rely on those dunder methods.

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

Nếu chúng ta kiểm tra sự bình đẳng giữa số nguyên và số điểm nổi bằng cách gọi thủ công

>>> 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, chúng ta sẽ thấy
>>> y = 3
>>> z = 3.0
>>> y.__eq__(z)
NotImplemented
2:

>>> y = 3
>>> z = 3.0
>>> y.__eq__(z)
NotImplemented

>>> y = 3
>>> z = 3.0
>>> y.__eq__(z)
NotImplemented
2 là một giá trị đặc biệt cho Python, như một số nguyên, tôi không biết cách kiểm tra bản thân để biết sự bình đẳng với số điểm nổi.

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

>>> y = 3
>>> z = 3.0
>>> y.__eq__(z)
NotImplemented
4, số điểm nổi, "Bạn có bằng y, số nguyên không?":

Nó nói

>>> y = 3
>>> z = 3.0
>>> y.__eq__(z)
NotImplemented
6.

Đó là lý do

>>> y = 3
>>> z = 3.0
>>> y.__eq__(z)
NotImplemented
7 thực sự hoạt động:

Chúng tôi phải làm mọi thứ (như kiểm tra bình đẳng ở đây), sử dụng toán tử

>>> y = 3
>>> z = 3.0
>>> y.__eq__(z)
NotImplemented
0. Chúng tôi không nên sử dụng trực tiếp các phương thức Dunder. Công việc của Python là gọi các phương pháp Dunder; Công việc của chúng tôi là thực hiện hoạt động cấp cao thay thế.

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

Phương pháp Dunder trong các nhà khai thác năng lượng Python như

>>> 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
 |
 | ...
6,
>>> name = "Trey"
>>> len(name)
4
0,
>>> name = "Trey"
>>> len(name)
4
1 và
>>> y = 3
>>> z = 3.0
>>> y.__eq__(z)
NotImplemented
0. Họ cũng cung cấp năng lượng cho một số chức năng tích hợp.power some of the built-in functions.

Ví dụ: nếu bạn yêu cầu độ dài của một cái gì đó:

>>> name = "Trey"
>>> len(name)
4

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

>>> name = "Trey"
>>> len(name)
4
3:

Hàm

>>> name = "Trey"
>>> len(name)
4
4 là một hàm tích hợp (trái ngược với phương pháp) vì Python đã quyết định rằng có độ dài là một thuộc tính cơ bản của một đối tượng. Vì vậy, Python có một chức năng tích hợp gọi là
>>> name = "Trey"
>>> len(name)
4
4 ủy thác cho một phương thức Dunder được sử dụng để khám phá xem có một cái gì đó có độ dài và độ dài đó là bao nhiêu.

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

>>> name = "Trey"
>>> len(name)
4
3:

>>> numbers = [2, 1, 3, 4, 7]
>>> numbers.__len__()
5
>>> len(numbers)
5

Trên thực tế, nhiều điều dường như, hoàn toàn cơ bản đối với Python, như lập chỉ mục một danh sách, được cung cấp bởi các phương pháp 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

>>> name = "Trey"
>>> len(name)
4
7 được gọi là:

>>> numbers.__getitem__(0)
2

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

Vì vậy, các phương pháp Dunder, sức mạnh khá nhiều tất cả các nhà khai thác trong Python và thậm chí một số chức năng tích hợp.

Một phương pháp Dunder là một phương pháp (mà Python biết đến), có hai dấu gạch dưới trước đó và hai dấu gạch dưới sau đó.

Đó là một hợp đồng giữa người thực hiện một lớp nhất định và thông dịch viên 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 học của riêng mình trong Python, bạn có thể sử dụng các phương thức Dunder để vận hành quá tải. Và đó thực sự là những gì các tác giả thư viện của bên thứ ba làm, để làm cho các đối tượng trong thư viện của họ hoạt động như các đối tượng Python bản địa.

Mọi thứ có phải là một đối tượng trong lập trình không?

- [Người hướng dẫn] Trong lập trình hướng đối tượng, mọi thứ đều là một đối tượng.Trong thực tế, chúng tôi đã làm việc với các đối tượng tất cả thời gian này.Bạn có thể không nhận ra nó.Hãy lấy một số nguyên đơn giản, int giá trị của tôi bằng năm.In object-oriented programming, everything is an object. In fact, we have been working with objects all this time. You might just not have realized it. Let's take a simple integer, int my value equals five.

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

Python là một ngôn ngữ lập trình định hướng đối tượng.Hầu hết mọi thứ trong Python là một đối tượng, với các thuộc tính và phương pháp của nó.Một lớp giống như một hàm tạo đối tượng hoặc "bản thiết kế" để tạo các đối tượng.Almost everything in Python is an object, with its properties and methods. A Class is like an object constructor, or a "blueprint" for creating objects.

Mọi thứ có phải là Python là một chuỗi không?

Vì Python là ngôn ngữ lập trình hướng đối tượng, và do đó mọi thứ trong Python là một đối tượng, mọi số nguyên, chuỗi, danh sách và chức năng.everything in Python is an object, every integer, string, list and functions.

Mọi thứ có phải là một lớp học không?

Tất cả các đối tượng trong Python được đại diện bởi các lớp.Các lớp là chính các đối tượng, nhưng các lớp có thể gọi được sử dụng để tạo các thể hiện của các đối tượng mà chúng ta quen thuộc.Theo cách này, tất cả các đối tượng là trường hợp của các lớp.. Classes are objects themselves, but callable ones used to create instances of the objects we're familiar with. In this way, all objects are instances of classes.