Có phải mọi phương pháp đều cần một Python không?
Nếu bạn phát triển sự hiểu biết trực quan về sự khác biệt của chúng, bạn sẽ có thể viết Python hướng đối tượng để truyền đạt ý định rõ ràng hơn và sẽ dễ bảo trì hơn trong thời gian dài Show
Tiền thưởng miễn phí. Nhấp vào đây để có quyền truy cập vào Bảng cheat Python OOP miễn phí chỉ cho bạn các hướng dẫn, video và sách hay nhất để tìm hiểu thêm về Lập trình hướng đối tượng với Python Các phương thức sơ thẩm, lớp và tĩnh - Tổng quanHãy bắt đầu bằng cách viết một lớp (Python 3) chứa các ví dụ đơn giản cho cả ba loại phương thức
Loại bỏ các quảng cáo Phương thức sơ thẩmPhương thức đầu tiên trên 9, được gọi là 0, là một phương thức thể hiện thông thường. Đó là loại phương thức cơ bản, không rườm rà mà bạn sẽ sử dụng hầu hết thời gian. Bạn có thể thấy phương thức nhận một tham số, 1, trỏ đến một thể hiện của 9 khi phương thức được gọi (nhưng tất nhiên các phương thức thể hiện có thể chấp nhận nhiều hơn một tham số)Thông qua tham số 1, các phương thức thể hiện có thể tự do truy cập các thuộc tính và các phương thức khác trên cùng một đối tượng. Điều này mang lại cho họ rất nhiều sức mạnh khi sửa đổi trạng thái của một đối tượngKhông chỉ chúng có thể sửa đổi trạng thái đối tượng, các phương thức thể hiện còn có thể truy cập chính lớp đó thông qua thuộc tính 4. Điều này có nghĩa là các phương thức thể hiện cũng có thể sửa đổi trạng thái lớpphương pháp lớpHãy so sánh điều đó với phương pháp thứ hai, 5. Tôi đã đánh dấu phương thức này bằng một công cụ trang trí để đánh dấu nó là một phương thức của lớpThay vì chấp nhận một tham số 1, các phương thức lớp lấy một tham số 8 trỏ đến lớp—chứ không phải thể hiện của đối tượng—khi phương thức được gọiBởi vì phương thức lớp chỉ có quyền truy cập vào đối số 8 này, nên nó không thể sửa đổi trạng thái thể hiện của đối tượng. Điều đó sẽ yêu cầu quyền truy cập vào 1. Tuy nhiên, các phương thức lớp vẫn có thể sửa đổi trạng thái lớp áp dụng trên tất cả các phiên bản của lớpPhương thức tĩnhPhương thức thứ ba, 1 được đánh dấu bằng một công cụ trang trí để đánh dấu nó là một phương thức tĩnhLoại phương thức này không nhận tham số 1 cũng như tham số 8 (nhưng tất nhiên có thể chấp nhận một số tùy ý các tham số khác)Do đó, một phương thức tĩnh không thể sửa đổi trạng thái đối tượng cũng như trạng thái lớp. Các phương thức tĩnh bị hạn chế về loại dữ liệu mà chúng có thể truy cập - và chúng chủ yếu là một cách để tạo không gian tên cho các phương thức của bạn Hãy xem chúng hoạt độngTôi biết cuộc thảo luận này đã khá lý thuyết cho đến thời điểm này. Và tôi tin rằng điều quan trọng là bạn phải phát triển sự hiểu biết trực quan về sự khác biệt của các loại phương pháp này trong thực tế. Bây giờ chúng ta sẽ đi qua một số ví dụ cụ thể Chúng ta hãy xem các phương thức này hoạt động như thế nào khi chúng ta gọi chúng. Chúng ta sẽ bắt đầu bằng cách tạo một thể hiện của lớp và sau đó gọi ba phương thức khác nhau trên đó 9 được thiết lập theo cách mà mỗi phương thức triển khai trả về một bộ chứa thông tin để chúng tôi theo dõi những gì đang diễn ra — và phần nào của lớp hoặc đối tượng mà phương thức có thể truy cậpĐây là những gì xảy ra khi chúng ta gọi một phương thức thể hiện >>>
Điều này xác nhận rằng 0 (phương thức thể hiện) có quyền truy cập vào thể hiện đối tượng (được in dưới dạng 7) thông qua đối số 1Khi phương thức được gọi, Python sẽ thay thế đối số 1 bằng đối tượng thể hiện, 0. Chúng ta có thể bỏ qua đường cú pháp của cú pháp gọi dấu chấm ( 1) và chuyển đối tượng thể hiện theo cách thủ công để nhận được kết quả tương tự>>>
Bạn có đoán được điều gì sẽ xảy ra nếu bạn cố gắng gọi phương thức mà không tạo một thể hiện trước không? Nhân tiện, các phương thức thể hiện cũng có thể truy cập chính lớp đó thông qua thuộc tính 4. Điều này làm cho các phương thức cá thể trở nên mạnh mẽ về mặt hạn chế truy cập - chúng có thể sửa đổi trạng thái trên cá thể đối tượng và trên chính lớp đóHãy thử phương thức lớp tiếp theo >>>
Việc gọi 3 cho chúng ta thấy rằng nó không có quyền truy cập vào đối tượng 7 mà chỉ truy cập vào đối tượng 5, đại diện cho chính lớp đó (mọi thứ trong Python đều là một đối tượng, ngay cả bản thân các lớp)Lưu ý cách Python tự động chuyển lớp làm đối số đầu tiên cho hàm khi chúng ta gọi 6. Gọi một phương thức trong Python thông qua cú pháp dấu chấm sẽ kích hoạt hành vi này. Tham số 1 trên các phương thức cá thể hoạt động theo cùng một cáchXin lưu ý rằng việc đặt tên các tham số này là 1 và 8 chỉ là một quy ước. Bạn có thể dễ dàng đặt tên cho chúng là 0 và 1 và nhận được kết quả tương tự. Tất cả những gì quan trọng là chúng được đặt ở vị trí đầu tiên trong danh sách tham số cho phương thứcĐã đến lúc gọi phương thức tĩnh ngay bây giờ >>>
Bạn có thấy cách chúng tôi gọi 2 trên đối tượng và có thể thực hiện thành công không? Đằng sau hậu trường Python chỉ đơn giản thực thi các hạn chế truy cập bằng cách không chuyển vào đối số 1 hoặc 8 khi một phương thức tĩnh được gọi bằng cú pháp dấu chấmĐiều này xác nhận rằng các phương thức tĩnh không thể truy cập trạng thái đối tượng cũng như trạng thái lớp. Chúng hoạt động giống như các hàm thông thường nhưng thuộc về không gian tên của lớp (và của mọi cá thể) Bây giờ, hãy xem điều gì sẽ xảy ra khi chúng ta cố gắng gọi các phương thức này trên chính lớp đó - mà không tạo trước một thể hiện đối tượng >>>
Chúng tôi đã có thể gọi 3 và 2 tốt, nhưng cố gắng gọi phương thức thể hiện 7 không thành công với một 8Và điều này được mong đợi — lần này chúng ta không tạo một thể hiện đối tượng và thử gọi một hàm thể hiện trực tiếp trên chính bản thiết kế của lớp. Điều này có nghĩa là không có cách nào để Python đưa vào đối số 1 và do đó cuộc gọi không thành côngĐiều này sẽ làm cho sự khác biệt giữa ba loại phương thức này rõ ràng hơn một chút. Nhưng tôi sẽ không để nó ở đó. Trong hai phần tiếp theo, tôi sẽ xem xét hai ví dụ thực tế hơn một chút về thời điểm sử dụng các loại phương thức đặc biệt này Tôi sẽ dựa trên các ví dụ của mình xung quanh lớp 0 cơ bản này
>>>
Loại bỏ các quảng cáo Nhà Máy Pizza Ngon Với >>> obj = MyClass()
>>> obj.method()
('instance method called', |