So sánh đối tượng Python

Khi so sánh hai đối tượng của một lớp tùy chỉnh bằng cách sử dụng 

<script.py> output:
    True
    False
2, Python theo mặc định chỉ so sánh các tham chiếu đối tượng, không so sánh dữ liệu có trong các đối tượng. Để ghi đè hành vi này, lớp có thể triển khai phương thức 
<script.py> output:
    True
    False
3 đặc biệt, phương thức này chấp nhận hai đối số — đối tượng được so sánh — và trả về 
<script.py> output:
    True
    False
0 hoặc 
<script.py> output:
    True
    False
1. Phương thức này sẽ được gọi ngầm khi hai đối tượng được so sánh

Lớp 

<script.py> output:
    True
    False
2 từ chương trước có sẵn cho bạn trong ngăn tập lệnh. Nó có một thuộc tính, 
<script.py> output:
    True
    False
3, và một phương thức 
<script.py> output:
    True
    False
4. Hai tài khoản ngân hàng có cùng số dư không nhất thiết phải là cùng một tài khoản, nhưng một tài khoản ngân hàng thường có số tài khoản và hai tài khoản có cùng số tài khoản nên được coi là giống nhau

Hãy thử chọn mã trong dòng 1-7 và nhấn nút “Chạy mã”. Sau đó, thử tạo một vài 

<script.py> output:
    True
    False
2 đối tượng trong bảng điều khiển và so sánh chúng

  • Sửa đổi phương thức 
    <script.py> output:
        True
        False
    6 để chấp nhận tham số mới – 
    <script.py> output:
        True
        False
    7 – và khởi tạo thuộc tính 
    <script.py> output:
        True
        False
    7 mới
  • Xác định một phương thức 
    <script.py> output:
        True
        False
    3 trả về 
    <script.py> output:
        True
        False
    0 nếu thuộc tính 
    <script.py> output:
        True
        False
    7 của hai đối tượng bằng nhau
  • Kiểm tra các câu lệnh in và đầu ra trong bảng điều khiển
  • Phương thức 
    <script.py> output:
        True
        False
    3 phải chấp nhận hai đối số, thường được gọi là 
    <script.py> output:
        True
        False
    13 và 
    <script.py> output:
        True
        False
    14
  • Khi thêm tham số vào
    <script.py> output:
        True
        False
    6, hãy nhớ rằng các tham số không có giá trị mặc định phải được đặt trước các tham số có giá trị mặc định
<script.py> output:
    True
    False
4

<script.py> output:
    True
    False

Lưu ý rằng phương pháp của bạn chỉ so sánh số tài khoản chứ không so sánh số dư. Điều gì sẽ xảy ra nếu hai tài khoản có cùng số tài khoản nhưng khác số dư? . Ở cuối chương này, bạn sẽ học cách định nghĩa các lớp ngoại lệ của riêng mình để tạo các loại lỗi tùy chỉnh này

Kiểm tra bình đẳng lớp

Trong bài tập trước, bạn đã xác định một lớp 

<script.py> output:
    True
    False
2 với thuộc tính 
<script.py> output:
    True
    False
7 được dùng để so sánh. Nhưng nếu bạn so sánh một đối tượng 
<script.py> output:
    True
    False
2 với một đối tượng của lớp khác cũng có thuộc tính 
<script.py> output:
    True
    False
7, thì bạn có thể nhận được kết quả không mong muốn

Ví dụ, xét hai lớp

<script.py> output:
    True
    False
00
<script.py> output:
    True
    False
01

Đang chạy

<script.py> output:
    True
    False
02 sẽ trả về 
<script.py> output:
    True
    False
0, mặc dù chúng tôi đang so sánh số điện thoại với số tài khoản ngân hàng.  

Bạn nên kiểm tra lớp đối tượng được truyền cho phương thức 

<script.py> output:
    True
    False
3 để đảm bảo phép so sánh có ý nghĩa

Cả hai lớp 

<script.py> output:
    True
    False
05 và 
<script.py> output:
    True
    False
2 đã được xác định. Hãy thử chạy mã nguyên trạng bằng cách sử dụng nút “Chạy mã” và kiểm tra đầu ra

  • Sửa đổi định nghĩa của 
    <script.py> output:
        True
        False
    2 để chỉ trả về 
    <script.py> output:
        True
        False
    0 nếu thuộc tính 
    <script.py> output:
        True
        False
    7 giống nhau và 
    <script.py> output:
        True
        False
    90 của cả hai đối tượng được truyền cho nó giống nhau

Chạy mã và kiểm tra lại đầu ra

<script.py> output:
    True
    False
1Toán tửPhương thức
<script.py> output:
    True
    False
2
<script.py> output:
    True
    False
3
<script.py> output:
    True
    False
93
<script.py> output:
    True
    False
94______295
<script.py> output:
    True
    False
96
<script.py> output:
    True
    False
97
<script.py> output:
    True
    False
98
<script.py> output:
    True
    False
99
<script.py> output:
    True
    False
80
<script.py> output:
    True
    False
81
<script.py> output:
    True
    False
82
  • __hash__() để sử dụng các đối tượng làm khóa từ điển và theo bộ
<script.py> output:
    True
    False
0

<script.py> output:
    True
    False
9

Bây giờ chỉ so sánh các đối tượng của cùng một lớp

<script.py> output:
    True
    False
2 có thể trả về
<script.py> output:
    True
    False
0. Một cách khác để đảm bảo rằng một đối tượng có cùng loại như bạn mong đợi là sử dụng hàm 
<script.py> output:
    True
    False
85 . Điều này có thể hữu ích khi xử lý tính kế thừa, vì Python coi một đối tượng là một thể hiện của cả lớp cha và lớp con

Hãy thử chạy 

<script.py> output:
    True
    False
86 trong bảng điều khiển (với thứ tự đẳng thức bị đảo ngược)

Điều này cho bạn biết điều gì về phương pháp 

<script.py> output:
    True
    False
3 ?

So sánh và kế thừa

Điều gì xảy ra khi một đối tượng được so sánh với một đối tượng của lớp con?

<script.py> output:
    True
    False
8

Lớp 

<script.py> output:
    True
    False
88 kế thừa từ lớp 
<script.py> output:
    True
    False
89 và cả hai đều triển khai phương thức 
<script.py> output:
    True
    False
3 bao gồm bản in chẩn đoán

Phương thức 

<script.py> output:
    True
    False
3 nào sẽ được gọi khi đoạn mã sau được chạy?

<script.py> output:
    True
    False
0

Khi chạy trong bảng điều khiển, kết quả là

<script.py> output:
    True
    False
1

Điều này cho thấy rằng khi hai lớp, một lớp là lớp cha chứa phương thức __eq__() và trường hợp con cũng vậy. Và khi cả hai biến thành một đối tượng và các đối tượng được so sánh, thì Python luôn gọi phương thức 

<script.py> output:
    True
    False
3 của con khi so sánh một đối tượng con với một đối tượng cha

Bạn có thể so sánh các đối tượng bằng == không?

So sánh các đối tượng ¶ . Hai thể hiện đối tượng là bằng nhau nếu chúng có cùng thuộc tính và giá trị (giá trị được so sánh với == ) và là thể hiện của cùng một lớp .

== và === trong Python là gì?

Toán tử == kiểm tra xem hai toán hạng có bằng giá trị không. Toán tử === kiểm tra xem hai toán hạng có bằng nhau về kiểu dữ liệu và giá trị hay không .

== Là một toán tử so sánh trong Python?

Toán tử “==” so sánh bằng cách kiểm tra sự bằng nhau . nếu chúng ta so sánh hai đối tượng người ở trên bằng cách sử dụng toán tử ==, chúng ta sẽ nhận được câu trả lời là “cả hai người đều bình đẳng”, vì chúng mang cùng một giá trị tên. Tuy nhiên, toán tử “is” so sánh các danh tính.

== hoạt động như thế nào trong Python?

Nói một cách đơn giản. == xác định xem giá trị của hai đối tượng có bằng nhau hay không , trong khi is xác định xem chúng có phải là cùng một đối tượng hay không. *id() là một hàm có sẵn trong Python. Nó chấp nhận một tham số duy nhất và được sử dụng để trả về danh tính của một đối tượng.