Quá tải init python
Đôi khi bạn cần viết một lớp Python cung cấp nhiều cách để xây dựng các đối tượng. Nói cách khác, bạn muốn một lớp triển khai nhiều hàm tạo. Loại lớp này rất hữu ích khi bạn cần tạo các thể hiện bằng cách sử dụng các loại hoặc số lượng đối số khác nhau. Có các công cụ để cung cấp nhiều hàm tạo sẽ giúp bạn viết các lớp linh hoạt có thể thích ứng với các nhu cầu thay đổi Show
Trong Python, có một số kỹ thuật và công cụ mà bạn có thể sử dụng để xây dựng các lớp, bao gồm mô phỏng nhiều hàm tạo thông qua các đối số tùy chọn, tùy chỉnh việc tạo cá thể thông qua các phương thức lớp và thực hiện gửi đặc biệt với các trình trang trí. Nếu bạn muốn tìm hiểu về các kỹ thuật và công cụ này, thì hướng dẫn này là dành cho bạn Trong hướng dẫn này, bạn sẽ học cách
Bạn cũng sẽ có một cái nhìn sâu sắc về cách Python xây dựng các thể hiện bên trong của một lớp thông thường và cách một số lớp thư viện tiêu chuẩn cung cấp nhiều hàm tạo Để tận dụng tối đa hướng dẫn này, bạn nên có kiến thức cơ bản về lập trình hướng đối tượng và hiểu cách định nghĩa các phương thức lớp với 8. Bạn cũng nên có kinh nghiệm làm việc với các trình trang trí trong PythonTiề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 Khởi tạo các lớp trong PythonPython hỗ trợ lập trình hướng đối tượng với các lớp dễ tạo và sử dụng. Các lớp Python cung cấp các tính năng mạnh mẽ có thể giúp bạn viết phần mềm tốt hơn. Các lớp giống như bản thiết kế cho các đối tượng, còn được gọi là thể hiện. Cũng giống như cách bạn có thể xây dựng nhiều ngôi nhà từ một bản thiết kế duy nhất, bạn có thể xây dựng một số phiên bản từ một lớp Để định nghĩa một lớp trong Python, bạn cần sử dụng từ khóa theo sau là tên lớp >>>
Python có một bộ phong phú mà bạn có thể sử dụng trong các lớp học của mình. Python gọi ngầm các phương thức đặc biệt để tự động thực thi nhiều loại thao tác trên các phiên bản. Có các phương thức đặc biệt để làm cho các đối tượng của bạn có thể lặp lại, cung cấp một biểu diễn chuỗi phù hợp cho các đối tượng của bạn, khởi tạo các thuộc tính thể hiện, v.v. Một phương pháp đặc biệt khá phổ biến là. Phương thức này cung cấp cái được gọi là trình khởi tạo cá thể trong Python. Công việc của phương thức này là khởi tạo với các giá trị phù hợp khi bạn khởi tạo một lớp nhất định Trong 3, đối số đầu tiên của phương thức 2 được gọi là 5. Đối số này giữ đối tượng hoặc thể hiện hiện tại, được truyền hoàn toàn trong lệnh gọi phương thức. Đối số này là phổ biến cho mọi trong Python. Đối số thứ hai của 2 được gọi là 7 và sẽ giữ tên của người đó dưới dạng một chuỗiGhi chú. Sử dụng để đặt tên cho đối tượng hiện tại là một quy ước khá mạnh trong Python nhưng không bắt buộc. Tuy nhiên, việc sử dụng tên khác sẽ khiến các nhà phát triển Python đồng nghiệp của bạn phải nhướng mày Khi bạn đã xác định một lớp, bạn có thể bắt đầu khởi tạo nó. Nói cách khác, bạn có thể bắt đầu tạo các đối tượng của lớp đó. Để làm điều này, bạn sẽ sử dụng một cú pháp quen thuộc. Chỉ cần gọi lớp bằng cách sử dụng một cặp dấu ngoặc đơn ( 9), đây là cú pháp tương tự mà bạn sử dụng để gọi bất kỳ hàm Python nào>>> 0Trong Python, tên lớp cung cấp thứ mà các ngôn ngữ khác, chẳng hạn như C++ và Java, gọi hàm tạo của lớp. Gọi một lớp, giống như bạn đã làm với 3, kích hoạt quy trình khởi tạo lớp của Python, quy trình này chạy nội bộ theo hai bước
Để tiếp tục với ví dụ trên, giá trị mà bạn chuyển làm đối số cho 3 được chuyển nội bộ cho 2 và sau đó được gán cho thuộc tính thể hiện 43. Bằng cách này, bạn khởi tạo phiên bản người của mình, 44, với dữ liệu hợp lệ mà bạn có thể xác nhận bằng cách truy cập vào 43. Thành công. 46 thực sự là tên của anh ấyGhi chú. Khi bạn gọi lớp để tạo một thể hiện mới, bạn cần cung cấp bao nhiêu đối số mà 2 yêu cầu để phương thức này có thể khởi tạo tất cả các thuộc tính thể hiện yêu cầu một giá trị ban đầuBây giờ bạn đã hiểu cơ chế khởi tạo đối tượng, bạn đã sẵn sàng để tìm hiểu Python làm gì trước khi đến điểm này trong quy trình khởi tạo. Đã đến lúc tìm hiểu một phương pháp đặc biệt khác, được gọi là. Phương pháp này đảm nhiệm việc tạo các phiên bản mới trong Python Ghi chú. Phương thức đặc biệt của 48 thường được gọi là hàm tạo của lớp trong Python. Tuy nhiên, công việc của nó thực sự là tạo các đối tượng mới từ bản thiết kế lớp, vì vậy bạn có thể gọi nó chính xác hơn là trình tạo cá thể hoặc trình tạo đối tượngPhương thức đặc biệt của 48 lấy lớp bên dưới làm đối số đầu tiên của nó và trả về một đối tượng mới. Đối tượng này thường là một thể hiện của lớp đầu vào, nhưng trong một số trường hợp, nó có thể là một thể hiện của một lớp khácNếu đối tượng mà 48 trả về là một thể hiện của lớp hiện tại, thì thể hiện này ngay lập tức được chuyển đến 2 cho mục đích khởi tạo. Hai bước này chạy khi bạn gọi lớpLớp của Python cung cấp cơ sở hoặc triển khai mặc định của 48 và 2. Không giống như với 2, bạn hiếm khi cần ghi đè lên 48 trong các lớp tùy chỉnh của mình. Hầu hết thời gian, bạn có thể yên tâm dựa vào triển khai mặc định của nóĐể tóm tắt những gì bạn đã học cho đến nay, quá trình khởi tạo của Python bắt đầu khi bạn gọi một lớp với các đối số thích hợp. Sau đó, quá trình chạy qua hai bước. tạo đối tượng bằng phương thức 48 và khởi tạo đối tượng bằng phương thức 2Bây giờ bạn đã biết về hành vi bên trong này của Python, bạn đã sẵn sàng đi sâu vào việc cung cấp nhiều hàm tạo trong các lớp của mình. Nói cách khác, bạn sẽ cung cấp nhiều cách để xây dựng các đối tượng của một lớp Python nhất định Loại bỏ các quảng cáoĐịnh nghĩa nhiều hàm tạo lớpĐôi khi bạn muốn viết một lớp cho phép bạn xây dựng các đối tượng bằng cách sử dụng các đối số của các kiểu dữ liệu khác nhau hoặc thậm chí một số lượng đối số khác nhau. Một cách để đạt được điều này là cung cấp nhiều phương thức khởi tạo trong lớp. Mỗi hàm tạo sẽ cho phép bạn tạo các thể hiện của lớp bằng cách sử dụng một bộ đối số khác Một số ngôn ngữ lập trình, chẳng hạn như C++, C# và Java, hỗ trợ cái được gọi là nạp chồng hàm hoặc phương thức. Tính năng này cho phép bạn cung cấp nhiều hàm tạo lớp vì nó cho phép bạn tạo nhiều hàm hoặc phương thức có cùng tên và các cách triển khai khác nhau Nạp chồng phương thức có nghĩa là tùy thuộc vào cách bạn gọi phương thức hiện có, ngôn ngữ sẽ chọn triển khai phù hợp để chạy. Vì vậy, phương thức của bạn có thể thực hiện các tác vụ khác nhau tùy theo ngữ cảnh của cuộc gọi Thật không may, Python không hỗ trợ nạp chồng hàm trực tiếp. Các lớp Python giữ các tên phương thức trong một từ điển nội bộ có tên là , chứa không gian tên lớp. Giống như bất kỳ từ điển Python nào, 90 không thể có các khóa lặp lại, vì vậy bạn không thể có nhiều phương thức có cùng tên trong một lớp nhất định. Nếu bạn cố gắng làm như vậy, thì Python sẽ chỉ nhớ lần triển khai cuối cùng của phương thức trong tay
Trong ví dụ này, bạn tạo 92 dưới dạng một lớp Python với hai phương thức. Cả hai phương thức đều có cùng tên, nhưng chúng có cách triển khai hơi khác nhauĐể tìm hiểu điều gì sẽ xảy ra khi hai phương thức có cùng tên, hãy lưu lớp của bạn vào tệp 93 trong thư mục làm việc của bạn và chạy đoạn mã sau trong một phiên tương tác>>>
Trong ví dụ này, bạn gọi 94 trên 95, đây là một thể hiện của lớp 92. Bạn nhận được 97 thay vì 98 trên màn hình, điều này xác nhận rằng phương pháp triển khai thứ hai chiếm ưu thế so với phương pháp đầu tiênDòng mã cuối cùng kiểm tra nội dung của 90, phát hiện ra rằng tên của phương thức, 00, chỉ xuất hiện một lần trong không gian tên lớp. Điều này phù hợp với cách hoạt động của từ điển trong PythonĐiều gì đó tương tự cũng xảy ra với các hàm trong mô-đun Python và trong phiên tương tác. Lần triển khai cuối cùng của một số chức năng có cùng tên chiếm ưu thế so với các lần triển khai còn lại >>> 4Bạn định nghĩa hai hàm có cùng tên, 01, trong cùng một phiên thông dịch. Tuy nhiên, định nghĩa thứ hai ghi đè định nghĩa đầu tiên. Khi bạn gọi hàm, bạn nhận được 97, điều này xác nhận rằng định nghĩa hàm cuối cùng chiếm ưu thếMột kỹ thuật khác mà một số ngôn ngữ lập trình sử dụng để cung cấp nhiều cách gọi một phương thức hoặc hàm là gửi nhiều lần. Với kỹ thuật này, bạn có thể viết một vài triển khai khác nhau của cùng một phương thức hoặc hàm và tự động gửi triển khai mong muốn theo loại hoặc các đặc điểm khác của đối số được sử dụng trong lệnh gọi. Bạn có thể sử dụng một vài công cụ từ thư viện tiêu chuẩn để kéo kỹ thuật này vào mã Python của mình Python là một ngôn ngữ khá linh hoạt và giàu tính năng, đồng thời cung cấp một số cách để triển khai nhiều hàm tạo và làm cho các lớp của bạn linh hoạt hơn Trong phần sau, bạn sẽ mô phỏng nhiều hàm tạo bằng cách truyền các đối số tùy chọn và bằng cách kiểm tra các loại đối số để xác định các hành vi khác nhau trong các trình khởi tạo cá thể của bạn Mô phỏng nhiều hàm tạo trong các lớp của bạnMột kỹ thuật khá hữu ích để mô phỏng nhiều hàm tạo trong một lớp Python là cung cấp cho 2 các đối số tùy chọn sử dụng các giá trị đối số mặc định. Bằng cách này, bạn có thể gọi hàm tạo của lớp theo nhiều cách khác nhau và nhận được một hành vi khác nhau mỗi lầnMột chiến lược khác là kiểm tra kiểu dữ liệu của các đối số đối với 2 để cung cấp các hành vi khác nhau tùy thuộc vào kiểu dữ liệu cụ thể mà bạn chuyển trong cuộc gọi. Kỹ thuật này cho phép bạn mô phỏng nhiều hàm tạo trong một lớpTrong phần này, bạn sẽ tìm hiểu kiến thức cơ bản về cách mô phỏng nhiều cách để xây dựng đối tượng bằng cách cung cấp các giá trị mặc định thích hợp cho các đối số của phương thức 2 và cũng bằng cách kiểm tra kiểu dữ liệu của các đối số cho phương thức này. Cả hai cách tiếp cận chỉ yêu cầu một lần triển khai 2Loại bỏ các quảng cáoSử dụng các giá trị đối số tùy chọn trong >>> from greet import Greeter
>>> greeter = Greeter()
>>> greeter.say_hello()
Hello, Pythonista
>>> Greeter.__dict__
mappingproxy({..., 'say_hello': |