Chúng ta có thể kế thừa đối tượng trong python không?
Không có ngôn ngữ lập trình hướng đối tượng nào đáng để xem xét hoặc sử dụng nếu nó không hỗ trợ tính kế thừa. Kế thừa được phát minh vào năm 1969 cho Simula. Python không chỉ hỗ trợ kế thừa mà còn hỗ trợ đa kế thừa. Nói chung, kế thừa là cơ chế tạo ra các lớp mới từ các lớp hiện có. Bằng cách này, chúng ta có được một hệ thống phân cấp các lớp. Trong hầu hết các ngôn ngữ hướng đối tượng dựa trên lớp, một đối tượng được tạo thông qua kế thừa (một "đối tượng con") có được tất cả - mặc dù có một số ngoại lệ trong một số ngôn ngữ lập trình - thuộc tính và hành vi của đối tượng cha Show
Kế thừa cho phép lập trình viên tạo các lớp được xây dựng dựa trên các lớp hiện có và điều này cho phép một lớp được tạo thông qua kế thừa kế thừa các thuộc tính và phương thức của lớp cha. Điều này có nghĩa là tính kế thừa hỗ trợ khả năng sử dụng lại mã. Các phương thức hay nói chung là phần mềm được kế thừa bởi một lớp con được coi là được sử dụng lại trong lớp con. Mối quan hệ của các đối tượng hoặc các lớp thông qua kế thừa tạo ra một đồ thị có hướng Lớp mà một lớp kế thừa được gọi là lớp cha hoặc lớp cha. Một lớp kế thừa từ một lớp cha được gọi là một lớp con, còn được gọi là lớp kế thừa hoặc lớp con. Các siêu lớp đôi khi cũng được gọi là tổ tiên. Tồn tại mối quan hệ thứ bậc giữa các lớp. Nó tương tự như các mối quan hệ hoặc phân loại mà chúng ta biết từ cuộc sống thực. Ví dụ, hãy nghĩ về phương tiện. Xe đạp, ô tô, xe buýt và xe tải là phương tiện. Xe bán tải, xe tải, xe thể thao, xe mui trần và xe bất động sản đều là xe ô tô và với tư cách là ô tô, chúng cũng là phương tiện. Chúng tôi có thể triển khai một lớp phương tiện trong Python, lớp này có thể có các phương thức như tăng tốc và phanh. Ô tô, Xe buýt và Xe tải và Xe đạp có thể được triển khai dưới dạng các lớp con sẽ kế thừa các phương thức này từ phương tiện Đào tạo Python trực tiếp Thưởng thức trang này? Nhìn thấy. Tổng quan về các khóa học Python trực tiếp đăng ký tại đây Cú pháp kế thừa trong PythonCú pháp cho một định nghĩa lớp con trông như thế này
Thay vì câu lệnh <__main__.Robot object at 0x7fd0080b3ba8>9 sẽ có các phương thức và thuộc tính như ở các lớp khác. Tên BaseClassName phải được xác định trong phạm vi chứa định nghĩa lớp dẫn xuất Bây giờ chúng ta đã sẵn sàng cho một ví dụ kế thừa đơn giản với mã Python Ví dụ kế thừa đơn giảnChúng tôi sẽ gắn bó với các rô-bốt yêu quý của chúng tôi hoặc tốt hơn là lớp x = Robot("Marvin") y = PhysicianRobot("James") print(isinstance(x, Robot), isinstance(y, Robot)) print(isinstance(x, PhysicianRobot)) print(isinstance(y, PhysicianRobot)) print(type(y) == Robot, type(y) == PhysicianRobot)0 từ các chương trước của hướng dẫn Python của chúng tôi để chỉ ra nguyên tắc kế thừa hoạt động như thế nào. Chúng ta sẽ định nghĩa một lớp x = Robot("Marvin") y = PhysicianRobot("James") print(isinstance(x, Robot), isinstance(y, Robot)) print(isinstance(x, PhysicianRobot)) print(isinstance(y, PhysicianRobot)) print(type(y) == Robot, type(y) == PhysicianRobot)1, kế thừa từ lớp x = Robot("Marvin") y = PhysicianRobot("James") print(isinstance(x, Robot), isinstance(y, Robot)) print(isinstance(x, PhysicianRobot)) print(isinstance(y, PhysicianRobot)) print(type(y) == Robot, type(y) == PhysicianRobot)0 class Robot: def __init__(self, name): self.name = name def say_hi(self): print("Hi, I am " + self.name) class PhysicianRobot(Robot): pass x = Robot("Marvin") y = PhysicianRobot("James") print(x, type(x)) print(y, type(y)) y.say_hi() ĐẦU RA<__main__.Robot object at 0x7fd0080b3ba8> Nếu bạn nhìn vào mã của lớp x = Robot("Marvin") y = PhysicianRobot("James") print(isinstance(x, Robot), isinstance(y, Robot)) print(isinstance(x, PhysicianRobot)) print(isinstance(y, PhysicianRobot)) print(type(y) == Robot, type(y) == PhysicianRobot)1 của chúng tôi, bạn có thể thấy rằng chúng tôi chưa định nghĩa bất kỳ thuộc tính hoặc phương thức nào trong lớp này. Vì lớp x = Robot("Marvin") y = PhysicianRobot("James") print(isinstance(x, Robot), isinstance(y, Robot)) print(isinstance(x, PhysicianRobot)) print(isinstance(y, PhysicianRobot)) print(type(y) == Robot, type(y) == PhysicianRobot)1 là lớp con của lớp x = Robot("Marvin") y = PhysicianRobot("James") print(isinstance(x, Robot), isinstance(y, Robot)) print(isinstance(x, PhysicianRobot)) print(isinstance(y, PhysicianRobot)) print(type(y) == Robot, type(y) == PhysicianRobot)0, trong trường hợp này, nó kế thừa cả phương thức x = Robot("Marvin") y = PhysicianRobot("James") print(isinstance(x, Robot), isinstance(y, Robot)) print(isinstance(x, PhysicianRobot)) print(isinstance(y, PhysicianRobot)) print(type(y) == Robot, type(y) == PhysicianRobot)6 và x = Robot("Marvin") y = PhysicianRobot("James") print(isinstance(x, Robot), isinstance(y, Robot)) print(isinstance(x, PhysicianRobot)) print(isinstance(y, PhysicianRobot)) print(type(y) == Robot, type(y) == PhysicianRobot)7. Kế thừa các phương thức này có nghĩa là chúng ta có thể sử dụng chúng như thể chúng đã được định nghĩa trong lớp x = Robot("Marvin") y = PhysicianRobot("James") print(isinstance(x, Robot), isinstance(y, Robot)) print(isinstance(x, PhysicianRobot)) print(isinstance(y, PhysicianRobot)) print(type(y) == Robot, type(y) == PhysicianRobot)1. Khi chúng ta tạo một thể hiện của x = Robot("Marvin") y = PhysicianRobot("James") print(isinstance(x, Robot), isinstance(y, Robot)) print(isinstance(x, PhysicianRobot)) print(isinstance(y, PhysicianRobot)) print(type(y) == Robot, type(y) == PhysicianRobot)1, hàm x = Robot("Marvin") y = PhysicianRobot("James") print(isinstance(x, Robot), isinstance(y, Robot)) print(isinstance(x, PhysicianRobot)) print(isinstance(y, PhysicianRobot)) print(type(y) == Robot, type(y) == PhysicianRobot)6 cũng sẽ tạo một thuộc tính name. Chúng ta có thể áp dụng phương thức x = Robot("Marvin") y = PhysicianRobot("James") print(isinstance(x, Robot), isinstance(y, Robot)) print(isinstance(x, PhysicianRobot)) print(isinstance(y, PhysicianRobot)) print(type(y) == Robot, type(y) == PhysicianRobot)7 cho đối tượng <__main__.Robot object at 0x7fd0080b3ba8>62 <__main__.Robot object at 0x7fd0080b3ba8>63, như chúng ta có thể thấy trong kết quả từ đoạn mã trên Đào tạo Python trực tiếp Thưởng thức trang này? Nhìn thấy. Tổng quan về các khóa học Python trực tiếp Các khóa học trực tuyến sắp tới Khóa học nâng cao chuyên sâu Lập trình hướng đối tượng với Python đăng ký tại đây Sự khác biệt giữa <__main__.Robot object at 0x7fd0080b3ba8> |