CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Mục lục

Trang chủBlogTìm hiểu về Python super(...

Tìm hiểu về Python super() qua ví dụ cụ thể

4 phút đọc30/08/2025
CyStack Author
Chris Pham

Technical Writer

0 lượt xem
Reading Time: 4 minutes

Hàm Python super() cho phép chúng ta tham chiếu đến lớp (class) cha một cách tường minh. Nó hữu ích trong trường hợp inheritance (kế thừa) khi chúng ta muốn gọi các hàm của lớp cha

Tìm hiểu về Python super() qua ví dụ cụ thể

Python super()

Để hiểu về hàm super của Python, bạn phải biết về inheritance trong Python. Trong inheritance của Python, các lớp con (subclasses) kế thừa từ lớp cha (superclass). Hàm super của Python cho phép chúng ta tham chiếu đến superclass một cách ngầm định.

Vì vậy, Python super() giúp công việc của chúng ta dễ dàng và thoải mái hơn. Khi tham chiếu đến superclass từ subclass, chúng ta không cần phải viết tên của superclass một cách tường minh. Trong các phần sau, chúng ta sẽ thảo luận về hàm super() của Python.

Ví dụ về hàm super() của Python

Đầu tiên, hãy xem đoạn mã mà chúng tôi đã sử dụng trong hướng dẫn về inheritance của Python. Trong ví dụ đó, superclass là Person và subclass là Student. Đoạn code được hiển thị dưới đây.

class Person:
    # initializing the variables
    name = ""
    age = 0

    # defining constructor
    def __init__(self, person_name, person_age):
        self.name = person_name
        self.age = person_age

        # defining class methods

    def show_name(self):
        print(self.name)

    def show_age(self):
        print(self.age)

# definition of subclass starts here
class Student(Person):
    studentId = ""

    def __init__(self, student_name, student_age, student_id):
        Person.__init__(self, student_name, student_age)
        self.studentId = student_id

    def get_id(self):
        return self.studentId  # returns the value of student id

# end of subclass definition

# Create an object of the superclass
person1 = Person("Richard", 23)
# call member methods of the objects
person1.show_age()
# Create an object of the subclass
student1 = Student("Max", 22, "102")
print(student1.get_id())
student1.show_name()

Trong ví dụ trên, chúng ta đã gọi hàm của lớp cha như sau:

Person.__init__(self, student_name, student_age) 

Chúng ta có thể thay thế điều này bằng lời gọi hàm super() của Python như dưới đây.

super().__init__(student_name, student_age)

Kết quả sẽ vẫn giống nhau trong cả hai trường hợp, như được hiển thị trong hình ảnh dưới đây.

python super function

Python 3 super()

Lưu ý rằng cú pháp trên dành cho hàm super() của Python 3. Nếu bạn đang sử dụng các phiên bản Python 2.x, thì có một chút khác biệt và bạn sẽ phải thực hiện các thay đổi sau:

class Person(object):
...
        super(Student, self).__init__(student_name, student_age)

Thay đổi đầu tiên là phải có object làm lớp cơ sở cho Person. Điều này là bắt buộc để sử dụng hàm super() trong các phiên bản Python 2.x. Nếu không, bạn sẽ nhận được lỗi sau.

Traceback (most recent call last):
  File "super_example.py", line 40, in 
    student1 = Student("Max", 22, "102")
  File "super_example.py", line 25, in __init__
    super(Student, self).__init__(student_name, student_age)
TypeError: must be type, not classobj

Thay đổi thứ hai là trong chính cú pháp của hàm super(). Như bạn có thể thấy, hàm super() của Python 3 dễ sử dụng hơn rất nhiều và cú pháp cũng gọn gàng hơn.

Hàm super() của Python với multilevel inheritance.

Như chúng tôi đã nói trước đây, hàm super() của Python cho phép chúng ta tham chiếu đến superclass một cách ngầm định. Nhưng trong trường hợp multilevel inheritance (kế thừa đa cấp), nó sẽ tham chiếu đến lớp nào? Hàm super() của Python sẽ luôn tham chiếu đến superclass ngay lập tức. Ngoài ra, hàm super() của Python không chỉ có thể tham chiếu đến hàm __init__() mà còn có thể gọi tất cả các hàm khác của superclass. Vì vậy, trong ví dụ sau, chúng ta sẽ thấy điều đó.

class A:
    def __init__(self):
        print('Initializing: class A')

    def sub_method(self, b):
        print('Printing from class A:', b)

class B(A):
    def __init__(self):
        print('Initializing: class B')
        super().__init__()

    def sub_method(self, b):
        print('Printing from class B:', b)
        super().sub_method(b + 1)

class C(B):
    def __init__(self):
        print('Initializing: class C')
        super().__init__()

    def sub_method(self, b):
        print('Printing from class C:', b)
        super().sub_method(b + 1)

if __name__ == '__main__':
    c = C()
    c.sub_method(1)

Hãy xem kết quả của ví dụ super() của Python 3 trên với kế thừa đa cấp.

Initializing: class C
Initializing: class B
Initializing: class A
Printing from class C: 1
Printing from class B: 2
Printing from class A: 3

Từ kết quả, chúng ta có thể thấy rõ rằng hàm __init__() của lớp C đã được gọi trước, sau đó đến lớp B và sau đó là lớp A. Điều tương tự đã xảy ra khi gọi hàm sub_method().

Tại sao chúng ta cần hàm super() của Python

Nếu bạn đã có kinh nghiệm trước đó về ngôn ngữ Java, thì bạn nên biết rằng lớp cơ sở cũng được gọi bởi một đối tượng super ở đó. Vì vậy, khái niệm này thực sự hữu ích cho các lập trình viên. Tuy nhiên, Python cũng giữ lại cơ sở cho lập trình viên sử dụng tên superclass để tham chiếu đến chúng. Và, nếu chương trình của bạn có kế thừa đa cấp, thì hàm super() này rất hữu ích cho bạn. Đó là tất cả về hàm super() của Python. Hy vọng, bạn đã hiểu chủ đề này. Vui lòng sử dụng hộp bình luận cho bất kỳ truy vấn nào.

Bạn có thể xem toàn bộ Python script và nhiều ví dụ về Python hơn từ GitHub Repository của chúng tôi.

Tham khảo: Official Documentation

Về tác giả

Chris Pham
Chris PhamTechnical Writer

I have over 5 years of experience writing technical documentation for tech products, making them accessible and user-friendly. My focus is always on providing clear and precise information. @#@ Tôi đã có hơn 5 năm kinh nghiệm viết tài liệu kỹ thuật cho các sản phẩm công nghệ, giúp người dùng dễ dàng tiếp cận và sử dụng. Tôi luôn tập trung vào việc cung cấp thông tin chính xác và dễ hiểu.

Cập nhật thông tin mới nhấtNhận các thông tin mới nhất về mối đe dọa, báo cáo an ninh mạng từ CyStack về hòm thư điện tử của bạn

Thảo luận (0)

Đăng nhập để thảo luận

Bài viết liên quan