Hướng dẫn __init__ multiple inheritance python - __init__ python đa kế thừa
Cách tiếp cận ("kiểu mới" hoặc "kiểu cũ") sẽ hoạt động nếu bạn có quyền kiểm soát mã nguồn cho 8 và 9. Nếu không, việc sử dụng một lớp bộ điều hợp có thể là cần thiết.if you have control over the source code for 8 and 9. Otherwise, use of an adapter class might be necessary. Show
Mã nguồn có thể truy cập: Sử dụng đúng "kiểu mới"
Ở đây, thứ tự phân giải phương pháp (MRO) ra lệnh sau:
Bạn có thể nói rằng trường hợp này được thiết kế cho nhiều kế thừa. Mã nguồn có thể truy cập: Sử dụng đúng "kiểu cũ"
Ở đây, MRO không quan trọng, vì 0 và 6 được gọi là rõ ràng. 2 cũng sẽ hoạt động tốt.Mặc dù trường hợp này không được "thiết kế" cho nhiều kế thừa theo phong cách mới như trước đây, nhưng nhiều kế thừa vẫn có thể. Bây giờ, điều gì sẽ xảy ra nếu 8 và 9 đến từ thư viện của bên thứ ba - tức là, bạn không có quyền kiểm soát mã nguồn cho 8 và 9? Câu trả lời ngắn gọn: Bạn phải thiết kế một lớp bộ điều hợp thực hiện các cuộc gọi 7 cần thiết, sau đó sử dụng một lớp trống để xác định MRO (xem bài viết của Raymond Hettinger trên 7 - đặc biệt là phần, "Cách kết hợp lớp không hợp tác").you have no control over the source code for 8 and 9? The short answer: You must design an adapter class that implements the necessary 7 calls, then use an empty class to define the MRO (see Raymond Hettinger's article
on 7 - especially the section, "How to Incorporate a Non-cooperative Class").Cha mẹ của bên thứ ba: >>> C() -> C -> A -> B <- B <- A <- C 8 không thực hiện >>> C() -> C -> A <- A -> B <- B <- C 7; >>> C() -> C -> A -> B <- B <- A <- C 9 không
Lớp 2 thực hiện 7 để 4 có thể xác định MRO, xuất hiện khi 5 được thực thi.Và điều gì sẽ xảy ra nếu đó là cách khác? Cha mẹ của bên thứ ba: >>> C() -> C -> A -> B <- B <- A <- C 8 thực hiện >>> C() -> C -> A <- A -> B <- B <- C 7; >>> C() -> C -> A -> B <- B <- A <- C 9 không
Cùng một mẫu ở đây, ngoại trừ thứ tự thực thi được chuyển đổi trong 9; 7 Gọi trước, sau đó gọi rõ ràng. Lưu ý rằng mỗi trường hợp với cha mẹ của bên thứ ba yêu cầu một lớp bộ điều hợp duy nhất.
Mặc dù bạn có thể xử lý các trường hợp mà bạn không kiểm soát mã nguồn của 8 và 9 bằng cách sử dụng một lớp bộ điều hợp, nhưng đúng là bạn phải biết làm thế nào các lớp ban đầu thực hiện 7 (nếu có) vì thế.
1. Sử dụng tên lớp cha Đoạn code ví dụ cho thấy các thành viên của lớp cha có thể được truy cập tới từ bên trong các lớp con, bằng cách sử dụng tên của lớp cha. 2. Sử dụng hàm super() Chúng ta cũng có thể truy cập tới các thành viên của lớp cha bằng cách sử dụng hàm super(). Đoạn code dưới đây sẽ mô tả cách sử dụng hàm super() để truy cập tới các thành viên của lớp cha, từ lớp con
Kết quả in ra là:
Trang chủ 0Kết quả in ra là: 12. Object class – lớp đối tượng là gì?Cũng giống như lớp đối tượng trong Java, bắt đầu từ phiên bản 3.x của Python, đối tượng là gốc rễ của tất cả các lớp. Trong Python 3.x, “class Test(object)” và “class Test” là như nhau. Trong Python 2.x, “class Test(object)” sẽ tạo ra một lớp có đối tượng object làm lớp cha (được gọi là new style class), còn “class Test” sẽ tạo ra một old style class – lớp bình thường (không có đối tượng nào làm lớp cha của nó) 3. Python có hỗ trợ đã kế thừa – multiple inheritance không?Không giống như Java và giống như C++, Python có hỗ trợ đã kế thừa. Chúng ta có thể chỉ định nhiều lớp cha, phân cách nhau bởi dấu phẩy, và tất cả được bao trong một cặp dấu ngoặc tròn () để thực hiện đa kế thừa. Dưới đây là ví dụ mô tả cách thức hoạt động của đa kế thừa trong Python 2Kết quả in ra là: 34. Làm thế nào để truy cập tới các thành viên của lớp cha, tại lớp con?1. Sử dụng tên lớp cha Đoạn code ví dụ cho thấy các thành viên của lớp cha có thể được truy cập tới từ bên trong các lớp con, bằng cách sử dụng tên của lớp cha. 4Kết quả in ra là: 54. Làm thế nào để truy cập tới các thành viên của lớp cha, tại lớp con? 1. Sử dụng tên lớp cha Đoạn code ví dụ cho thấy các thành viên của lớp cha có thể được truy cập tới từ bên trong các lớp con, bằng cách sử dụng tên của lớp cha. 6Kết quả in ra là: 54. Làm thế nào để truy cập tới các thành viên của lớp cha, tại lớp con? 1. Sử dụng tên lớp cha Đoạn code ví dụ cho thấy các thành viên của lớp cha có thể được truy cập tới từ bên trong các lớp con, bằng cách sử dụng tên của lớp cha. 2. Sử dụng hàm super()
Lưu ý rằng, hai phương thức ở trên không hoàn toàn giống nhau. Trong bài học tiếp theo về kế thừa, chúng ta sẽ thảo luận tiếp hai chủ đề sau:
w3school
Youtube |