Khởi tạo lớp cha Python
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 Show
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 Đâ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 class Student(Person): def __init__(self, name, age, graduation_year): self.name = name self.age = age self.graduation_year = graduation_year def introduce(self): print(f"Hello, my name is {self.name}. I am {self.age} years old.") def graduates(self): print(f"{self.name} will graduate in {self.graduation_year}") Mặ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ã 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.") # Subclass 1. class Student(Person): def __init__(self, name, age, graduation_year): super().__init__(name, age) self.graduation_year = graduation_year def graduates(self): print(f"{self.name} will graduate in {self.graduation_year}") # Subclass 2. class Employee(Person): def __init__(self, name, age, start_year): super().__init__(name, age) self.start_year = start_year def graduates(self): print(f"{self.name} started working in {self.start_year}") Truy 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ã Hello, I am a Pet0 đầ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 Làm cách nào để khởi tạo một lớp trong Python?Nói tóm lại, quá trình khởi tạo của Python bắt đầu bằng một lệnh gọi đến hàm tạo của lớp, hàm này sẽ kích hoạt trình tạo cá thể,. __new__() , để tạo một đối tượng trống mới. Quá trình tiếp tục với trình khởi tạo cá thể,. __init__() , lấy các đối số của hàm tạo để khởi tạo đối tượng mới được tạo
Lớp cha trong Python là gì?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.
__ init __ trong Python là gì?Phương thức __init__ là tương đương Python với hàm tạo C++ theo cách tiếp cận hướng đối tượng . Hàm __init__ được gọi mỗi khi một đối tượng được tạo từ một lớp. Phương thức __init__ cho phép lớp khởi tạo các thuộc tính của đối tượng và không phục vụ mục đích nào khác. Nó chỉ được sử dụng trong các lớp học.
Làm cách nào để truy cập thuộc tính lớp cha từ lớp con trong Python?Chỉ các phiên bản gốc mới có thuộc tính đó. Từ bên trong một phương thức của Child, bạn có thể truy cập thuộc tính đó bằng self. myvar . Lưu câu trả lời này. |