Python tự chuyển sang phương thức lớp
Tham số Show
Nó không nhất thiết phải được đặt tên là Nếu bạn đã lập trình bằng Python (lập trình hướng đối tượng) một thời gian, thì bạn chắc chắn đã bắt gặp các phương thức có tham số đầu tiên là 3Trước tiên chúng ta hãy cố gắng hiểu tham số tự định kỳ này là gì Bản thân trong Python là gì?Trong lập trình hướng đối tượng, bất cứ khi nào chúng ta định nghĩa các phương thức cho một lớp, chúng ta sử dụng 3 làm tham số đầu tiên trong mỗi trường hợp. Hãy xem định nghĩa của một lớp có tên là 5
Trong trường hợp này, tất cả các phương thức, bao gồm cả 6, có tham số đầu tiên là 3Chúng ta biết rằng lớp là bản thiết kế cho các đối tượng. Bản thiết kế này có thể được sử dụng để tạo ra nhiều đối tượng. Hãy tạo hai đối tượng khác nhau từ lớp trên
Từ khóa 3 được sử dụng để đại diện cho một thể hiện (đối tượng) của lớp đã cho. Trong trường hợp này, hai đối tượng 5 0 và 1 có các thuộc tính riêng của chúng là 2 và 3. Nếu không có đối số tự, thì cùng một lớp không thể chứa thông tin cho cả hai đối tượng nàyTuy nhiên, do lớp chỉ là một bản thiết kế nên 3 cho phép truy cập vào các thuộc tính và phương thức của từng đối tượng trong python. Điều này cho phép mỗi đối tượng có các thuộc tính và phương thức riêng. Do đó, thậm chí rất lâu trước khi tạo các đối tượng này, chúng tôi tham chiếu các đối tượng là 3 trong khi định nghĩa lớpTại sao bản thân được xác định rõ ràng mọi lúc?Ngay cả khi chúng ta hiểu cách sử dụng của 3, nó vẫn có vẻ kỳ lạ, đặc biệt là đối với các lập trình viên đến từ các ngôn ngữ khác, rằng 3 được truyền dưới dạng tham số một cách rõ ràng mỗi khi chúng ta định nghĩa một phương thức. Như The Zen of Python đã nói, "Rõ ràng tốt hơn ngầm"Vì vậy, tại sao chúng ta cần phải làm điều này? . Chúng ta có một lớp 8 định nghĩa một phương thức 9 để tính khoảng cách từ gốc tọa độ
Bây giờ chúng ta hãy khởi tạo lớp này và tìm khoảng cách
Trong ví dụ trên, 0 định nghĩa ba tham số nhưng chúng ta chỉ chuyển hai tham số (6 và 8). Tương tự, 1 yêu cầu một nhưng không có đối số nào được thông qua. Tại sao Python không phàn nàn về số đối số này không khớp?Điều gì xảy ra trong nội bộ? 2 và 3 trong ví dụ trên là khác nhau và không hoàn toàn giống nhau
Chúng ta có thể thấy rằng cái đầu tiên là một hàm và cái thứ hai là một phương thức. Một điều đặc biệt về các phương thức (trong Python) là chính đối tượng được truyền làm đối số đầu tiên cho hàm tương ứng Trong trường hợp của ví dụ trên, cuộc gọi phương thức 4 thực sự tương đương với 5Nói chung, khi chúng ta gọi một phương thức với một số đối số, hàm lớp tương ứng được gọi bằng cách đặt đối tượng của phương thức trước đối số đầu tiên. Vì vậy, bất cứ thứ gì như 6 trở thành 7. Quá trình gọi là tự động trong khi quá trình nhận thì không (rõ ràng)Đây là lý do tham số đầu tiên của hàm trong lớp phải là chính đối tượng đó. Viết tham số này là 3 chỉ là một quy ước. Nó không phải là từ khóa và không có ý nghĩa đặc biệt trong Python. Chúng tôi có thể sử dụng các tên khác (như 9) nhưng điều đó không được khuyến khích. Hầu hết các nhà phát triển đều phản đối việc sử dụng các tên khác với tên 3 và làm giảm khả năng đọc của mã (Khả năng đọc được tính)Bản ngã có thể tránh đượcBây giờ bạn đã rõ rằng bản thân đối tượng (thể hiện) được truyền tự động dưới dạng đối số đầu tiên. Hành vi ngầm định này có thể tránh được khi tạo một phương thức tĩnh. Xét ví dụ đơn giản sau
Ở đây, 1 là một hàm trang trí làm cho 2 trở nên tĩnh. Hãy để chúng tôi khởi tạo lớp này và gọi phương thức
Từ ví dụ trên, chúng ta có thể thấy rằng hành vi ngầm truyền đối tượng làm đối số đầu tiên đã được tránh khi sử dụng một phương thức tĩnh. Nói chung, các phương thức tĩnh hoạt động giống như các hàm cũ đơn giản (Vì tất cả các đối tượng của một lớp đều chia sẻ các phương thức tĩnh)
Tự ở đây để ở lại 3 rõ ràng không phải là duy nhất đối với Python. Ý tưởng này được mượn từ Modula-3. Sau đây là trường hợp sử dụng khi nó trở nên hữu íchKhông có khai báo biến rõ ràng trong Python. Họ bắt đầu hành động trong nhiệm vụ đầu tiên. Việc sử dụng 3 giúp dễ dàng phân biệt giữa các thuộc tính thể hiện (và phương thức) với các biến cục bộTrong ví dụ đầu tiên, bản thân. x là một thuộc tính thể hiện trong khi x là một biến cục bộ. Chúng không giống nhau và chúng nằm trong các không gian tên khác nhau Nhiều người đã đề xuất biến self thành một từ khóa trong Python, như 5 trong C++ và Java. Điều này sẽ loại bỏ việc sử dụng dư thừa của 3 rõ ràng khỏi danh sách tham số chính thức trong các phương thứcMặc dù ý tưởng này có vẻ hứa hẹn nhưng nó sẽ không xảy ra. Ít nhất là không phải trong tương lai gần. Lý do chính là khả năng tương thích ngược. Đây là một blog của chính người tạo ra Python giải thích lý do tại sao bản thân rõ ràng phải ở lại __init__() không phải là hàm tạoMột kết luận quan trọng có thể được rút ra từ thông tin cho đến nay là phương thức 0 không phải là hàm tạo. Nhiều lập trình viên Python ngây thơ bị nhầm lẫn với nó vì 0 được gọi khi chúng ta tạo một đối tượngKiểm tra kỹ hơn sẽ tiết lộ rằng tham số đầu tiên trong 0 chính là đối tượng (đối tượng đã tồn tại). Hàm 0 được gọi ngay sau khi đối tượng được tạo và được sử dụng để khởi tạo nóVề mặt kỹ thuật, hàm tạo là một phương thức tự tạo đối tượng. Trong Python, phương thức này là 1. Một chữ ký phổ biến của phương pháp này là
Khi 1 được gọi, chính lớp đó sẽ tự động được chuyển thành đối số đầu tiên ( 3)Một lần nữa, giống như bản thân, cls chỉ là một quy ước đặt tên. Ngoài ra, *args và **kwargs được sử dụng để lấy số lượng đối số tùy ý trong khi gọi phương thức trong Python Một số điều quan trọng cần nhớ khi triển khai 1 là
Hãy xem một ví dụ
Bây giờ, hãy khởi tạo nó 0Ví dụ này minh họa rằng 1 được gọi trước 0. Chúng ta cũng có thể thấy rằng tham số cls trong 1 chính là lớp đó ( 8). Cuối cùng, đối tượng được tạo bằng cách gọi phương thức 1 trên lớp cơ sở đối tượngTrong Python, 3 là lớp cơ sở mà từ đó tất cả các lớp khác được dẫn xuất. Trong ví dụ trên, chúng tôi đã thực hiện việc này bằng cách sử dụng super()Sử dụng __new__ hay __init__?Bạn có thể đã thấy 0 rất thường xuyên nhưng việc sử dụng 1 rất hiếm. Điều này là do hầu hết thời gian bạn không cần ghi đè lên nó. Nói chung, 0 được sử dụng để khởi tạo đối tượng mới được tạo trong khi 1 được sử dụng để kiểm soát cách tạo đối tượngChúng ta cũng có thể sử dụng 1 để khởi tạo các thuộc tính của một đối tượng, nhưng về mặt logic thì nó phải nằm trong 0Tuy nhiên, một cách sử dụng thực tế của 1 có thể là hạn chế số lượng đối tượng được tạo từ một lớpGiả sử chúng ta muốn có một lớp 1 để tạo các thể hiện đại diện cho bốn đỉnh của một hình vuông. Chúng tôi có thể kế thừa từ lớp trước đó của chúng tôi 8 (ví dụ thứ hai trong bài viết này) và sử dụng 1 để thực hiện hạn chế này. Đây là một ví dụ để hạn chế một lớp chỉ có bốn trường hợp
Phương thức lớp có thể tự truy cập trong Python không?Các phương thức thể hiện cần một thể hiện của lớp và có thể truy cập thể hiện đó thông qua tự. Các phương thức lớp không cần một thể hiện của lớp. Họ không thể truy cập cá thể ( self ) nhưng họ có quyền truy cập vào chính lớp thông qua cls .
Bạn có thể vượt qua self bằng Python không?Sử dụng self khi. bạn định nghĩa một phương thức thể hiện, vì nó được truyền tự động làm tham số đầu tiên khi phương thức được gọi ; .
Bạn có thể sử dụng self trong một phương thức lớp không?Bằng cách sử dụng “self”, chúng ta có thể truy cập các thuộc tính và phương thức của lớp trong python . Nó liên kết các thuộc tính với các đối số đã cho. Lý do bạn cần sử dụng bản thân. là do Python không sử dụng cú pháp @ để chỉ các thuộc tính thể hiện.
Tại sao self được truyền dưới dạng tham số trong Python?Tham số self là tham chiếu đến phiên bản hiện tại của lớp và được dùng để truy cập các biến thuộc về lớp . |