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

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ã

  • Giả sử mã của bạn có hai lớp, Người và Sinh viên
  • Như các bạn đã biết, mỗi Học viên cũng là một Con người
  • Do đó, thật hợp lý khi kế thừa tất cả các thuộc tính của Người cho Học sinh

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

  • alice. giới thiệu [] được gọi từ lớp cha của Sinh viên, nghĩa là Người
  • alice. tốt nghiệp[] được gọi trực tiếp từ chính lớp Sinh viên

Đ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 Python

Khi 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

  • Lớp Parent có các thuộc tính v1 và v2. Chúng được khởi tạo trong phương thức init[] của lớp cha
  • Lớp Con kế thừa lớp Cha
  • Lớp Con khởi tạo đối tượng Lớp Cha
  • Lớp Con cũng tự khởi tạo bằng cách chỉ định một thuộc tính mới v3 chỉ thuộc về nó, không thuộc về Lớp Cha

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

  1. Có tên, tuổi và năm tốt nghiệp
  2. Biết giới thiệu bản thân
  3. Cho biết khi nào họ sẽ tốt nghiệp

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ể

  • Khởi tạo đối tượng Person trong Student. Điều này xảy ra với siêu[]. cuộc gọi __init__[]. Điều này cung cấp tên và tuổi cho đối tượng Sinh viên
  • Khởi tạo năm tốt nghiệp dành riêng cho sinh viên

Đâ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ừa

Bạ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 để giới thiệu chính nó
  • Hiển thị năm tốt nghiệp

Để 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 Pet
0

đầ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.

Chủ Đề