Đối tượng python nhỏ hơn

Có thể lấy phiên bản PDF của hướng dẫn này từ trang web của tôi hoặc Github. Hướng dẫn phương pháp ma thuật có kho lưu trữ git tại http. //www. github. com/RafeKettler/magicmethods. Mọi vấn đề có thể được báo cáo ở đó, cùng với nhận xét, [hoặc thậm chí là đóng góp. ]

Mục lục

Hướng dẫn này là đỉnh cao của các bài đăng trên blog trong vài tháng. Chủ đề là phương pháp ma thuật

Phương pháp ma thuật là gì? . Chúng là các phương thức đặc biệt mà bạn có thể định nghĩa để thêm "ma thuật" vào các lớp của mình. Chúng luôn được bao quanh bởi hai dấu gạch dưới [e. g.

if instance.equals[other_instance]:
    # do something
8 hoặc
if instance.equals[other_instance]:
    # do something
9]. Chúng cũng không được ghi lại đầy đủ như chúng cần. Tất cả các phương pháp kỳ diệu cho Python xuất hiện trong cùng một phần trong tài liệu Python, nhưng chúng nằm rải rác và chỉ được tổ chức lỏng lẻo. Hầu như không có ví dụ nào được tìm thấy trong phần đó [và điều đó rất có thể là do thiết kế, vì tất cả chúng đều được trình bày chi tiết trong tài liệu tham khảo ngôn ngữ, cùng với các mô tả cú pháp nhàm chán, v.v. ]

Vì vậy, để khắc phục những gì tôi coi là lỗ hổng trong tài liệu của Python, tôi đã bắt đầu cung cấp một số tài liệu dựa trên ví dụ, bằng tiếng Anh đơn giản hơn cho các phương thức ma thuật của Python. Tôi bắt đầu với các bài đăng trên blog hàng tuần và bây giờ tôi đã hoàn thành các bài đăng đó, tôi đã tổng hợp hướng dẫn này

tôi hy vọng bạn thích nó. Sử dụng nó như một hướng dẫn, bồi dưỡng hoặc tham khảo;

Mọi người đều biết phương pháp ma thuật cơ bản nhất,

if instance.equals[other_instance]:
    # do something
8. Đó là cách mà chúng ta có thể xác định hành vi khởi tạo của một đối tượng. Tuy nhiên, khi tôi gọi cho
if instance == other_instance:
    #do something
1,
if instance.equals[other_instance]:
    # do something
8 không phải là người đầu tiên được gọi. Trên thực tế, đó là một phương thức có tên là
if instance == other_instance:
    #do something
3, thực sự tạo ra thể hiện, sau đó chuyển bất kỳ đối số nào khi tạo vào trình khởi tạo. Ở đầu kia của tuổi thọ của đối tượng, có
if instance == other_instance:
    #do something
4. Hãy cùng tìm hiểu kỹ hơn về 3 phương pháp kỳ diệu này

if instance == other_instance:
    #do something
5
if instance == other_instance:
    #do something
3 là phương thức đầu tiên được gọi trong phần khởi tạo của đối tượng. Nó lấy lớp, sau đó bất kỳ đối số nào khác mà nó sẽ chuyển đến
if instance.equals[other_instance]:
    # do something
8.
if instance == other_instance:
    #do something
3 được sử dụng khá hiếm, nhưng nó có mục đích của nó, đặc biệt khi phân lớp con một loại bất biến như một bộ hoặc một chuỗi. Tôi không muốn đi vào quá nhiều chi tiết về
if instance == other_instance:
    #do something
3 vì nó không quá hữu ích, nhưng nó được trình bày rất chi tiết trong tài liệu Python.
if instance.equals[other_instance]:
    # do something
20Trình khởi tạo cho lớp. Nó được truyền bất cứ thứ gì hàm tạo chính được gọi với [vì vậy, ví dụ: nếu chúng ta gọi là
if instance.equals[other_instance]:
    # do something
21, thì
if instance.equals[other_instance]:
    # do something
8 sẽ được truyền là
if instance.equals[other_instance]:
    # do something
23 và
if instance.equals[other_instance]:
    # do something
24 làm đối số.
if instance.equals[other_instance]:
    # do something
8 hầu như được sử dụng phổ biến trong các định nghĩa lớp Python.
if instance.equals[other_instance]:
    # do something
26Nếu
if instance == other_instance:
    #do something
3 và
if instance.equals[other_instance]:
    # do something
8 tạo thành hàm tạo của đối tượng, thì
if instance == other_instance:
    #do something
4 là hàm hủy. Nó không triển khai hành vi cho câu lệnh
if instance.equals[other_instance]:
    # do something
20 [do đó mã sẽ không dịch thành
if instance.equals[other_instance]:
    # do something
21]. Thay vào đó, nó xác định hành vi khi một đối tượng được thu gom rác. Nó có thể khá hữu ích cho các đối tượng có thể yêu cầu dọn dẹp thêm khi xóa, như ổ cắm hoặc đối tượng tệp. Tuy nhiên, hãy cẩn thận vì không có gì đảm bảo rằng
if instance == other_instance:
    #do something
4 sẽ được thực thi nếu đối tượng vẫn còn hoạt động khi trình thông dịch thoát ra, do đó,
if instance == other_instance:
    #do something
4 không thể đóng vai trò thay thế cho các phương pháp mã hóa tốt [chẳng hạn như luôn đóng kết nối khi bạn thực hiện xong . Trên thực tế,
if instance == other_instance:
    #do something
4 hầu như không bao giờ được sử dụng vì hoàn cảnh bấp bênh mà nó được gọi;

Đặt tất cả lại với nhau, đây là một ví dụ về hoạt động của

if instance.equals[other_instance]:
    # do something
8 và
if instance == other_instance:
    #do something
4

if instance.equals[other_instance]:
    # do something
9

Một trong những lợi thế lớn nhất của việc sử dụng các phương thức kỳ diệu của Python là chúng cung cấp một cách đơn giản để làm cho các đối tượng hoạt động giống như các kiểu dựng sẵn. Điều đó có nghĩa là bạn có thể tránh được những cách thực hiện toán tử cơ bản xấu xí, phản trực giác và không chuẩn. Trong một số ngôn ngữ, việc làm như thế này là phổ biến

if instance.equals[other_instance]:
    # do something

Bạn chắc chắn cũng có thể làm điều này trong Python, nhưng điều này làm tăng thêm sự nhầm lẫn và dài dòng không cần thiết. Các thư viện khác nhau có thể sử dụng các tên khác nhau cho cùng một hoạt động, khiến máy khách thực hiện nhiều công việc hơn mức cần thiết. Tuy nhiên, với sức mạnh của các phương thức ma thuật, chúng ta có thể định nghĩa một phương thức [trong trường hợp này là ____227] và thay vào đó hãy nói ý của chúng ta

if instance == other_instance:
    #do something

Đó là một phần sức mạnh của phương pháp ma thuật. Phần lớn trong số chúng cho phép chúng ta định nghĩa ý nghĩa cho các toán tử để chúng ta có thể sử dụng chúng trên các lớp của riêng mình giống như chúng được xây dựng trong các kiểu

Python có một loạt các phương thức ma thuật được thiết kế để thực hiện so sánh trực quan giữa các đối tượng bằng cách sử dụng toán tử, không gọi phương thức khó xử. Họ cũng cung cấp một cách để ghi đè hành vi Python mặc định để so sánh các đối tượng [bằng cách tham khảo]. Đây là danh sách các phương pháp đó và những gì họ làm

if instance.equals[other_instance]:
    # do something
28
if instance.equals[other_instance]:
    # do something
29 là phương pháp ma thuật so sánh cơ bản nhất. Nó thực sự thực hiện hành vi cho tất cả các toán tử so sánh [

Chủ Đề