Phương thức ma thuật __eq__ của Python

Khi đăng mã, vui lòng sao chép mã ban đầu của bạn, sau đó dán và định dạng mã, thay vì đăng hình ảnh của mã. Điều đó sẽ cho phép chúng tôi sao chép nó, vì vậy chúng tôi có thể dùng thử và sau đó trả lời các câu hỏi về nó một cách hiệu quả hơn

Một kỹ thuật để định dạng mã là đặt các dòng gồm ba dấu tích ngược trước và sau mã, như sau

```
# example code
print["Monty Python Daily Menu"]
for meal in ["breakfast", "lunch", "dinner", "midnight snack"]:
    print[f"Spam for {meal}!"]
```

Khi bao gồm mã nội tuyến trong phần tường thuật của bài đăng, hãy định dạng nó. Để định dạng ở đó, bạn có thể bao quanh đoạn mã bằng các dấu tích ngược hoặc chọn đoạn mã và nhấp vào nút

Richard de Jong

… python lấy jane cho tham số 'other', vì vậy eq[self, other] trở thành eq[john, jane] và dòng 'return self. tuổi = khác. tuổi tác' trở thành 'trả lại john. tuổi = jane. tuổi'

Về cơ bản, trong ví dụ của bạn, self đại diện cho đối tượng johnother đại diện cho đối tượng jane. Nhưng lưu ý rằng trong trích dẫn trên, bạn có các toán tử = duy nhất trong đó bạn nên có các toán tử ==. Cũng lưu ý rằng vì mã nội tuyến không được định dạng nên các chi tiết quan trọng, chẳng hạn như dấu gạch dưới, sẽ không xuất hiện

Xin chào @dejong1968,

Chúng tôi có hai hoạt động khác nhau xảy ra ở đây

  1. tạo hai đối tượng;
  2. so sánh chúng cho bình đẳng [và in kết quả]

Nếu trường hợp đầu tiên, các hoạt động có liên quan là

john = Person['john', 'doe', 25]
jane = Person['jane', 'doe', 25]

Hai đối tượng về cơ bản tuân theo cùng một tập hợp các sự kiện

  1. Đầu tiên, trình thông dịch tìm thấy lớp
    john = Person['john', 'doe', 25]
    jane = Person['jane', 'doe', 25]
    
    0 và gọi hàm tạo của nó với ba đối số, các chuỗi
    john = Person['john', 'doe', 25]
    jane = Person['jane', 'doe', 25]
    
    1 [hoặc
    john = Person['john', 'doe', 25]
    jane = Person['jane', 'doe', 25]
    
    2],
    john = Person['john', 'doe', 25]
    jane = Person['jane', 'doe', 25]
    
    3 và số nguyên
    john = Person['john', 'doe', 25]
    jane = Person['jane', 'doe', 25]
    
    4
  2. Nếu điều đó thành công, một đối tượng mới [một thể hiện của lớp Person] được trả về và trình thông dịch gán đối tượng đó cho biến có tên john [hoặc jane]

Tôi có ý nghĩa gì bởi "nhà xây dựng"?

Hàm tạo là một phương thức đặc biệt hoặc trong trường hợp của Python là hai phương thức, được gọi để tạo một thể hiện mới của lớp. Hai phương thức đó là hàm tạo thực sự, phương thức có tên là

john = Person['john', 'doe', 25]
jane = Person['jane', 'doe', 25]
7 và “bộ khởi tạo”
john = Person['john', 'doe', 25]
jane = Person['jane', 'doe', 25]
8

Phương thức

john = Person['john', 'doe', 25]
jane = Person['jane', 'doe', 25]
7 thực sự tạo ra thể hiện trong bộ nhớ;

Đừng quá lo lắng về sự khác biệt giữa chúng. Hầu như tất cả các lớp sẽ chỉ sử dụng cái này hoặc cái kia, và ở giai đoạn đầu này trong hành trình học Python, bạn chỉ cần quan tâm đến

john = Person['john', 'doe', 25]
jane = Person['jane', 'doe', 25]
8

Vì vậy, hàm tạo đã tạo một đối tượng hoặc thể hiện

john = Person['john', 'doe', 25]
jane = Person['jane', 'doe', 25]
0 trong bộ nhớ. Bây giờ, phương thức
john = Person['john', 'doe', 25]
jane = Person['jane', 'doe', 25]
8 được tự động gọi để điền dữ liệu vào đó

Điều này đặt ba thuộc tính của đối tượng. [Các từ đồng nghĩa với “thuộc tính” có thể bao gồm các thuộc tính, thành viên hoặc biến thể hiện. Không có cái nào trong số ba cái đó hoàn toàn chính xác đối với Python, vì vậy tốt nhất bạn nên gắn bó với thuộc tính. ]

self.first_name = first_name

Ở đây, biến self đại diện cho phiên bản hiện tại đang được xử lý. Phần sau dấu chấm là tên của thuộc tính, “first_name”. Vì vậy, chúng tôi đang lưu trữ giá trị của tham số phương thức “first_name” vào đối tượng dưới tên thuộc tính “first_name”

Và tương tự cho hai thuộc tính còn lại là “last_name” và “age”

Vào thời điểm phương thức

john = Person['john', 'doe', 25]
jane = Person['jane', 'doe', 25]
8 chạy, cá thể có ba thuộc tính được đặt, sử dụng “john”, “doe” và 25. Phiên bản đó sau đó được lưu trong biến có tên là john

Sau đó, trình thông dịch thực hiện lại tất cả cho biến jane

Bây giờ chúng ta đến với hoạt động thứ hai. so sánh các biến john và jane cho bình đẳng

Đầu tiên, trình thông dịch định vị các đối tượng được lưu trữ trong các biến, cả hai đều là đối tượng

john = Person['john', 'doe', 25]
jane = Person['jane', 'doe', 25]
0. Điều đó sẽ đơn giản hóa vấn đề

Thông dịch viên sẽ tìm kiếm phương pháp

self.first_name = first_name
9 đặc biệt, được sử dụng để thực hiện các bài kiểm tra bình đẳng. Nó tìm nạp phương thức đó bằng cách xem biến john, vì vậy john là “self” và jane là “other”

[Nếu bạn viết 1 thay vào đó, thì jane sẽ là “self” và john là “other”. ]

Sau đó phương thức

self.first_name = first_name
9 được thực thi. Nó bỏ qua thuộc tính first_name và last_name, và chỉ quan tâm đến thuộc tính age. Nếu hai trường hợp có cùng tuổi, thì chúng được coi là bằng nhau

Trước đó, tôi đã nói rằng việc có cả hai đối tượng là _______1_______0 thể hiện sẽ khiến mọi thứ trở nên đơn giản hơn. Nếu chúng khác nhau thì sao?

Nếu hai đối tượng không thuộc cùng một lớp, giả sử bạn có một Người được so sánh với Robot [giả sử], các quy tắc sẽ trở nên phức tạp hơn. Đầu tiên, trình thông dịch sẽ hỏi đối tượng Person xem nó có biết cách so sánh chính nó với Robot không;

Nếu điều đó cũng không thành công, trình thông dịch sẽ quay trở lại bài kiểm tra cuối cùng. nó sẽ kiểm tra xem hai đối số có phải là cùng một đối tượng trong bộ nhớ hay không, trong trường hợp này chúng bằng nhau, nếu không chúng được coi là không bằng nhau

Phương thức __ eq __ trong Python là gì?

Python có toán tử “==”, toán tử “is” và “__eq__” phương thức dunder để so sánh hai đối tượng của một lớp hoặc để tùy chỉnh phép so sánh.

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.

Làm cách nào để so sánh hai phương thức trong Python?

Tóm tắt. - Để so sánh hai đối tượng, chúng ta cần thực hiện các toán tử __comparison__ tích hợp sẵn . - Nếu chúng ta triển khai các phương thức < và

Làm cách nào để so sánh hai đối tượng trong Python?

Toán tử == so sánh giá trị hoặc đẳng thức của hai đối tượng , trong khi toán tử is của Python kiểm tra xem hai biến có trỏ đến cùng một đối tượng trong bộ nhớ hay không. Trong phần lớn các trường hợp, điều này có nghĩa là bạn nên sử dụng các toán tử đẳng thức == và. = , trừ khi bạn đang so sánh với Không.

Chủ Đề