Lớp python không kế thừa thuộc tính
Kế thừa là khả năng của một lớp (lớp con/lớp dẫn xuất/lớp con) để lấy hoặc kế thừa các thuộc tính hoặc thuộc tính từ một số lớp khác (lớp cha/lớp cơ sở). Kế thừa làm tăng khả năng sử dụng lại mã. Chúng ta không cần phải viết đi viết lại cùng một mã. Kế thừa nó cho phép các lập trình viên thêm nhiều tính năng hơn vào một lớp hoặc sửa đổi hành vi hiện có Show Hãy xem thủ tục thừa kế đơn giản này Phương thức class Contact: 1 được định nghĩa trong lớp class Contact: 2 không phải trong lớp class Contact: 3. Khi chúng ta kế thừa từ lớp cơ sở (ở dòng 9), chúng ta sẽ lấy các thuộc tính và thuộc tính của nó cho lớp con. Đó là lý do tại sao chúng ta có quyền truy cập vào phương thức class Contact: 1 ở lớp con và các đối tượng của nó (ở dòng 18 và 19)Các thuộc tính, thuộc tính hoặc phương thức của lớp cơ sở sẽ có sẵn cho lớp con chứ không phải ngược lại. Nếu chúng tôi viết class Contact: 0 thì chúng tôi sẽ gặp lỗi như. class Contact: 1 bởi vì, phương thức class Contact: 2 được định nghĩa trong lớp con, không phải trong lớp chaclass Contact: 3Python hỗ trợ kế thừa đa cấp. Khi một lớp được dẫn xuất từ một lớp cũng được dẫn xuất từ một lớp khác (một lớp có nhiều hơn một lớp cha) thì sự kế thừa như vậy được gọi là Kế thừa đa cấp. Mức độ thừa kế có thể được mở rộng đến bất kỳ cấp độ nào tùy thuộc vào mối quan hệ Ở đây, class Contact: 4 chỉ có phương thức class Contact: 5, class Contact: 6 có phương thức class Contact: 5 và class Contact: 8 (vì lớp B mở rộng lớp A) và class Contact: 9 có phương thức class Contact: 5 , class Contact: 8 và class Contact: 22 (vì lớp C mở rộng lớp B và lớp B mở rộng c)Kế thừa có tính chất bắc cầu (có nghĩa là nếu lớp B kế thừa từ lớp A khác, thì tất cả các lớp con của B sẽ tự động kế thừa từ lớp A) đa thừa kếPython hỗ trợ đa kế thừa, trong đó một lớp có thể có nhiều lớp cha Ở đây, class Contact: 9 kéo dài cả class Contact: 4 và class Contact: 6, đó là lý do tại sao các phương thức của class Contact: 4 và class Contact: 6 có sẵn cho lớp CThứ tự giải quyết phương pháp (MRO)Hãy bắt đầu thưởng thức trò chơi của bài viết này Ở đây, chúng ta có hai phương thức class Contact: 28 trong class Contact: 4 và class Contact: 6. class Contact: 9 kéo dài cả class Contact: 4 và class Contact: 6. Vì vậy, class Contact: 9 nhận cả hai phương thức của class Contact: 28. Sau đó, những gì sẽ được xuất ra ở dòng 16? Đối với hệ thống phân cấp lớp, Python cần xác định lớp nào sẽ sử dụng khi cố gắng truy cập một thuộc tính theo tên. Để làm điều này, Python xem xét thứ tự của các lớp cơ sở Đối với đoạn mã trước, phương thức class Contact: 28 của class Contact: 4 sẽ được thực thi và chúng ta sẽ nhận được đầu ra “class A speak”. Chúng ta thay đổi class Contact: 88 (tại dòng, 11) thành class Contact: 89 thì phương thức class Contact: 28 của class Contact: 6 sẽ được thực thi và chúng ta sẽ nhận được đầu ra “class B speak”Hãy thay đổi mã của class Contact: 9 như thế nàoclass Contact: 3Ở đây, phương thức class Contact: 28 của class Contact: 9 sẽ ghi đè phương thức class Contact: 28 trước đó. Và class Contact: 76 sẽ in ra “class C speak”Bây giờ, theo cuộc thảo luận của chúng tôi về MRO, hãy đoán xem đầu ra của mã này sẽ là gì chúc mừng. bạn hoàn toàn đúng. Đầu ra sẽ là “A” Triết lý nhỏ về thừa kếHãy xem xét một kịch bản mối quan hệ như class Contact: Lưu ý rằng, cả class Contact: 77 và class Contact: 78 đều có thuộc tính class Contact: 79 và cả hai đều giống hệt nhau. Nếu class Contact: 78 sẽ mở rộng lớp class Contact: 77 thì chúng ta chỉ cần viết thuộc tính class Contact: 42 trong lớp class Contact: 78. Nhưng chúng tôi đã không làm điều đó. Bởi vì, không hẳn người nhà cũng sẽ là bạn mà người nhà nhất định sẽ là người. Vì vậy, triết lý là, để kế thừa, cấu trúc giai cấp phải phản ánh đúng mối quan hệ giữa các giai cấpVài lời về `siêu`Đôi khi chúng ta cần gọi các phương thức của lớp cha tới một phương thức bị ghi đè của lớp con. Chúng ta có thể đạt được điều này bằng hàm class Contact: 44. Chúng ta có thể trực tiếp sử dụng các phương thức của super class hoặc sửa đổi chúng (điều này rất phổ biến)Chúng ta có thể viết class Contact: 6 nhưclass Contact: 2Nhìn vào super(B, self) (ở đây, class Contact: 44 có hai đối số. một lớp và đối tượng của nó). Đây là một cách gọi khác của class Contact: 44Sự khác biệt giữa super() và super(className, self)Python 3 khuyến khích sử dụng class Contact: 48, thay vì sử dụng class Contact: 49, cả hai đều có tác dụng như nhau. Python 2, chỉ hỗ trợ cú pháp class Contact: 49. Vì Python 2 được sử dụng rộng rãi nên Python 3 cũng hỗ trợ cho kiểu gọi class Contact: 44 này. Bạn biết thêm về siêu ở đâynội quanVì python hỗ trợ các loại kế thừa khác nhau nên đôi khi nó cần được xem xét kỹ lưỡng
Tại dòng 11, chúng tôi nhận được class Contact: 14 vì class Contact: 16 là đối tượng của class Contact: 4. Tại dòng 12, chúng tôi nhận được class Contact: 14 vì class Contact: 4 nằm trong chuỗi kế thừa của lớp đối tượng class Contact: 20.
Đầu ra ở dòng 15 có vẻ ổn nhưng đầu ra ở dòng 16 có thể trông kỳ lạ. Rõ ràng, class Contact: 24 không phải là lớp con của chính nó (class Contact: 24 ), nhưng Python hoạt động theo cách này
Ghi chú. Theo mặc định, mọi lớp Python là lớp con của lớp class Contact: 28 tích hợp
class Contact: 8
class Contact: 7Một trò chơi khác sử dụng __init__ và __new__ Chuyển đổi từ lớp sang đối tượng được gọi là khởi tạo. class Contact: 35 được sử dụng để khởi tạo đối tượng. Bên trong chức năng class Contact: 35 chỉ nên khởi tạo chức năng, không có gì hơnĐây là mã mẫu sử dụng class Contact: 35class Contact: 4Trong quá trình tạo đối tượng, phương thức class Contact: 35 không được thực thi trước, phương thức được thực thi trước là class Contact: 39. Phương thức class Contact: 10 nhận hầu hết các đối số giống nhau tại class Contact: 35 và nó chịu trách nhiệm thực sự tạo đối tượng mới (trước khi khởi tạo đối tượng)Chúng ta có thể sử dụng class Contact: 39 khi cần kiểm soát việc tạo một thể hiện mớiGiả sử chúng ta có 3 lớp, class Contact: 13, class Contact: 14 và class Contact: 15. Chúng tôi cần khởi tạo class Contact: 16 cho tệp Văn bản, class Contact: 17 cho tệp hình ảnh và class Contact: 13 cho các loại tệp khác. Chúng ta có thể có được điều này bằng cách khởi tạo chúng trực tiếpNhưng nếu chúng ta có thể khởi tạo chúng chỉ bằng cách sử dụng lớp cha ( class Contact: 13 ) tùy thuộc vào nội dung tệp thì sao? . Khá thú vị, KHÔNG?
Ở đây, chúng tôi đang khởi tạo các lớp class Contact: 16, ____617 và class Contact: 13 bằng cách sử dụng lớp class Contact: 13 (cha) tùy thuộc vào nội dung của tệp (class Contact: 04). Xem sự khác biệt giữa các đầu ra của dòng 35, 36 và 37Đó là tất cả cho trò chơi ngày hôm nay Chúc bạn chơi game vui vẻ với Python Bạn cũng có thể đọc
Câu chuyện này được xuất bản trong Đáng chú ý, nơi có hơn 10.000 độc giả đến mỗi ngày để tìm hiểu về con người và ý tưởng hình thành các sản phẩm mà chúng ta yêu thích Các thuộc tính lớp có được kế thừa trong Python không?Tính kế thừa cho phép chúng ta định nghĩa một lớp kế thừa tất cả các phương thức và thuộc tính từ một lớp khác . Lớp cha là lớp được kế thừa từ đó, còn được gọi là lớp cơ sở. Lớp con là lớp kế thừa từ lớp khác, còn gọi là lớp dẫn xuất.
Có phải mọi lớp Python đều kế thừa từ đối tượng không?Tất cả các lớp trong Python đều là đối tượng của lớp kiểu, và lớp kiểu này được gọi là Metaclass. Mỗi lớp trong Python, theo mặc định, kế thừa từ lớp cơ sở đối tượng .
Làm cách nào để tạo một lớp kế thừa từ một lớp Python khác?Để tạo một lớp kế thừa từ một lớp khác, sau tên lớp, bạn sẽ đặt dấu ngoặc đơn rồi liệt kê bất kỳ lớp nào mà lớp của bạn kế thừa. In a function definition, parentheses after the function name represent arguments that the function accepts.
Những thành viên lớp nào không thể được kế thừa?Một lớp con không kế thừa các thành phần private của lớp cha. |