Python siêu hạng là gì

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

James Bond<br>
Grade 10
3

Thí dụ

Sao chép

class person:
    def __init__(self, firstname, lastname):
        self.firstname = firstname
        self.lastname = lastname
    def fullname(self):
        print(firstname, ' ', lastname)
    
class student(person):
    def __init__(self, firstname, lastname, grade):
        self.grade = grade
        super().__init__(firstname, lastname) # calling base constructor
    def display_details():
        super().fullname() # calling base class method
        print('Grade ', self.grade)
        
std = student('James', 'Bond', '10')
std.display_details()

đầu ra

James Bond<br>
Grade 10

Trong ví dụ trên,

James Bond<br>
Grade 10
4 trong phương thức init của lớp
James Bond<br>
Grade 10
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ự,
James Bond<br>
Grade 10
6 gọi phương thức
James Bond<br>
Grade 10
7.
James Bond<br>
Grade 10
6 có thể được gọi là
class person:
    def __init__(self, firstname, lastname):
        self.firstname = firstname
        self.lastname = lastname
    def fullname(self):
        print(firstname, ' ', lastname)
    
class student(person):
    def __init__(self, firstname, lastname, grade):
        self.grade = grade
        super().__init__(firstname, lastname) # calling base constructor
    def display_details():
        super().fullname() # calling base class method
        print('Grade ', self.grade)
        
std = student('James', 'Bond', '10')
std.display_details()
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ã

  • 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

Super in Python lets you to access parent class methods.

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

Nơi đâ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

________số 8

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

super() in Python

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ã

James Bond<br>
Grade 10
0

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ã

James Bond<br>
Grade 10
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 .