Ví dụ sau minh họa cách lớp dẫn xuất có thể gọi lớp cơ sở bằng cách sử dụng phương thức 3 Show Thí dụ Sao chép
đầu ra
Trong ví dụ trên, 4 trong phương thức init của lớp 5 gọi phương thức init của lớp cơ sở person và truyền tham số. Theo cách tương tự, 6 gọi phương thức 7. 6 có thể được gọi là 0 Trong trường hợp này, sẽ vô ích nếu bạn phải lặp lại chính mình và triển khai lại các phương thức từ lớp này sang lớp khác Trong trường hợp này, bạn có thể sử dụng thừa kế Một ví dụ tuyệt vời về thừa kế sẽ là mối quan hệ Người-Học sinh trong mã
Ví dụ class Person: def __init__(self, name, age): self.name = name self.age = age def introduce(self): print(f"Hello, my name is {self.name}. I am {self.age} years old.") class Student(Person): def __init__(self, name, age, graduation_year): # DO not worry about the next line, we will come back to it very soon! super().__init__(name, age) self.graduation_year = graduation_year def graduates(self): print(f"{self.name} will graduate in {self.graduation_year}") Bây giờ bạn có thể sử dụng thiết lập này để tạo các đối tượng Sinh viên có thể sử dụng phương thức giới thiệu () của lớp Person Ví dụ alice = Student("Alice", 30, 2023) alice.introduce() alice.graduates() đầu ra Hello, my name is Alice. I am 30 years old. Alice will graduate in 2023 Trong đoạn mã này
Điều này thể hiện rõ cách thức hoạt động của thừa kế Mỗi học sinh là một con người. Thật hợp lý khi cung cấp trực tiếp các thuộc tính của một Người cho Sinh viên, thay vì triển khai lại chúng trong lớp Sinh viên Bây giờ bạn đã hiểu kế thừa trong Python là gì Tiếp theo, chúng ta hãy xem cách hoạt động của phương thức super() Siêu() trong PythonĐể truy cập các thuộc tính của lớp cha từ lớp con, bạn cần sử dụng phương thức super() super() là một tham chiếu rõ ràng đến lớp cơ sở. Nó liên kết lớp cha của bạn với lớp con Mọi thứ được tìm thấy trong lớp cha đều có thể được truy cập trong lớp con thông qua phương thức super() Ví dụ phổ biến nhất về việc sử dụng phương thức super() là khi khởi tạo Trong chương trước, bạn đã thấy một ví dụ về điều này Bây giờ, hãy xem xét sâu hơn về cách thức hoạt động của nó Siêu(). __init__() Gọi trong PythonKhi bạn khởi tạo một lớp con trong Python, bạn có thể gọi phương thức super(). phương thức __init__(). Điều này khởi tạo đối tượng lớp cha vào lớp con Ngoài ra, bạn cũng có thể thêm thông tin dành riêng cho trẻ em vào đối tượng trẻ em Đây là những gì nó thường trông giống như class Parent: def init(v1, v2): self.v1 = v1 self.v2 = v2 class Child(Parent): def init(v1, v2, v3): super().__init__(v1, v2) self.v3 = v3 Nơi đây
Hãy cùng xem một ví dụ cụ thể hơn Giả sử chúng ta có một lớp đại diện cho một người Mỗi người có một tên và tuổi Hơn nữa, mỗi đối tượng Person có khả năng tự giới thiệu bằng cách sử dụng phương thức giới thiệu() Đây là lớp Person trông như thế nào class Person: def __init__(self, name, age): self.name = name self.age = age def introduce(self): print(f"Hello, my name is {self.name}. I am {self.age} years old.") Lớp này hoạt động như một kế hoạch chi tiết để tạo các đối tượng Person trong mã của chúng tôi Bây giờ, giả sử chúng tôi cũng muốn đại diện cho sinh viên trong chương trình của mình Để làm điều này, chúng ta cần một lớp mới cho các đối tượng sinh viên Cụ thể hơn, mỗi học sinh nên
Chúng ta có thể viết một lớp hoàn toàn riêng biệt như thế này ________số 8Mặc dù điều này hoạt động, có một vấn đề Mã này hiện đang lặp lại Phương thức giới thiệu () đã được triển khai trong lớp Người. Ngoài ra, phương thức init() trông khá giống nhau Chúng tôi có thể cải thiện mã bằng cách sử dụng tính kế thừa Điều đầu tiên cần lưu ý là mỗi Học sinh cũng là một Người, điều này có ý nghĩa Do đó, chúng ta có thể kế thừa trực tiếp các thuộc tính của Person cho lớp Student Sau đó, hãy thêm một thành viên mới, tốt nghiệp_năm, vào đối tượng Sinh viên. Ngoài ra, chúng tôi cần một phương pháp để hiển thị này Vì vậy, khi bắt đầu khởi tạo đối tượng Student, chúng ta có thể
Đây là phiên bản cải tiến của lớp Student sử dụng tính kế thừa class Student(Person): def __init__(self, name, age, graduation_year): # 1. Initialize the Person object in Student. super().__init__(name, age) # 2. Initialize the graduation_year self.graduation_year = graduation_year # Add a method that tells when this Student is going to graduate. def graduates(self): print(f"{self.name} will graduate in {self.graduation_year}") Hãy chú ý đến super(). cuộc gọi __init__(tên, tuổi) Điều này gọi phương thức __init__() của lớp cha, Person Nói cách khác, nó khởi tạo một đối tượng Person thành đối tượng Student Phương thức super() trong Đa kế thừaBạn cũng có thể hợp lý hóa quá trình khởi tạo nhiều lớp với sự trợ giúp của phương thức super() Nói cách khác, bạn có thể sử dụng phương thức super() trong nhiều lớp con để truy cập các thuộc tính chung của lớp cha Chẳng hạn, hãy tạo một cấu trúc phân cấp sao cho đối tượng Person được kế thừa cho Student và Employee Đây là giao diện của nó trong mã 0Truy cập các phương thức kế thừa thông thường với Super()Trong một vài ví dụ trước, bạn đã thấy cách sử dụng phương thức super() để gọi bộ khởi tạo của lớp cha Điều quan trọng cần lưu ý là bạn cũng có thể truy cập bất kỳ phương thức nào khác Ví dụ: hãy sửa đổi ví dụ Person-Student một chút. Hãy tạo một phương thức info() cho lớp Sinh viên. Phương pháp này
Để gọi phương thức giới thiệu () từ lớp cha, hãy sử dụng phương thức super () để truy cập nó Đây là giao diện của nó trong mã 10đầu ra Hello, my name is Alice. I am 30 years old. Alice will graduate in 2023 Như bạn có thể thấy, bây giờ có thể gọi phương thức info() trên đối tượng Student để xem phần giới thiệu và bản in năm tốt nghiệp Siêu lớp là gì?Lớp cha là lớp mà từ đó có thể tạo ra nhiều lớp con . Các lớp con kế thừa các đặc tính của lớp cha. Lớp cha còn được gọi là lớp cha hoặc lớp cơ sở. Trong ví dụ trên, Vehicle là Superclass và các subclass của nó là Car, Truck và Motorcycle.
super() dùng để làm gì?Nó được sử dụng để gọi các phương thức của lớp bậc trên và để truy cập hàm tạo của lớp bậc trên . Cách sử dụng phổ biến nhất của từ khóa super là để loại bỏ sự nhầm lẫn giữa các lớp cha và lớp con có các phương thức có cùng tên.
Siêu () có cần thiết Python không?Nói chung là cần thiết . Và nó thường là lệnh gọi đầu tiên trong init của bạn. Đầu tiên nó gọi hàm init của lớp cha ( dict ).
Lớp cha và lớp con trong Python là gì?Lớp mà một lớp kế thừa từ đó được gọi là lớp cha hoặc lớp cha. Lớp kế thừa từ lớp cha được gọi là lớp con, còn được gọi là lớp thừa kế hay lớp con . |