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

Trang chủHướng dẫnTìm hiểu về Python super() qua ví dụ cụ thể

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

CyStack blog 4 phút để đọc
CyStack blog30/08/2025
Locker Avatar

Chris Pham

Technical Writer

Locker logo social
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 <module>
    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

0 Bình luận

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

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất