Menu
CoddyTech

Hàm super()

Thuộc phần Lập trình hướng đối tượng trong hành trình Python của Coddy. Bài học 18 trên 64.

Hàm (function) super() cho phép lớp con gọi các phương thức từ lớp cha. Nhờ vậy, bạn có thể mở rộng chức năng của lớp cha thay vì thay thế hoàn toàn.

Đây là ví dụ về cách dùng super() trong hàm khởi tạo:

class Animal:
    def __init__(self, name):
        self.name = name
        print(f"Animal created: {name}")
class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)  # Gọi __init__ của lớp cha
        self.breed = breed
        print(f"Dog breed set: {breed}")

Tạo một đối tượng (object) chó:

buddy = Dog("Buddy", "Golden Retriever")
print(f"Name: {buddy.name}, Breed: {buddy.breed}")

Đầu ra:

Animal created: Buddy
Dog breed set: Golden Retriever
Name: Buddy, Breed: Golden Retriever

Dùng super() để mở rộng các phương thức của lớp cha:

class Animal:
    def make_sound(self):
        print("Generic animal sound")
class Dog(Animal):
    def make_sound(self):
        super().make_sound()  # Gọi phương thức của lớp cha trước
        print("Woof!")        # Thêm hành vi riêng của chó

Gọi phương thức đã mở rộng:

buddy = Dog()
buddy.make_sound()

Đầu ra:

Generic animal sound
Woof!

Nếu không có super(), bạn sẽ mất chức năng của lớp cha:

class Cat(Animal):
    def make_sound(self):
        print("Meow!")  # Chỉ phát tiếng mèo, bỏ qua phương thức của lớp cha
cat = Cat()
cat.make_sound()

Đầu ra:

Meow!

Điểm chính: Dùng super() để gọi phương thức của lớp cha từ lớp con. Cách này giúp bạn mở rộng chức năng thay vì thay thế hoàn toàn chức năng đó. Các cách dùng phổ biến gồm gọi phương thức __init__ của lớp cha và mở rộng hành vi của lớp cha.

challenge icon

Thử thách

Trung bình

Trong thử thách này, bạn sẽ triển khai hệ thống phân cấp lớp Person và Employee bằng kế thừa.

  • person.py: Chứa lớp Person với các thuộc tính name và age
  • employee.py: Chứa lớp Employee kế thừa từ Person
  • driver.py: Tệp chính để kiểm tra phần triển khai của bạn

Mỗi tệp đều có các chú thích TODO chi tiết để hướng dẫn bạn triển khai.

Tự làm thử

# TODO: Nhập lớp Person từ person.py
# TODO: Nhập lớp Employee từ employee.py

def main():
    # TODO: Tạo đối tượng Person có tên "Alice" và tuổi 30
    person = None
    
    # TODO: Tạo đối tượng Employee có tên "Bob", tuổi 35 và công việc "Developer"
    employee = None
    
    # TODO: Gọi phương thức introduce() của đối tượng Person
    # Đầu ra dự kiến: "Hi, I'm Alice and I'm 30 years old"
    
    # TODO: In một dòng trống để tạo khoảng cách bằng print()
    
    # TODO: Gọi phương thức introduce() của đối tượng Employee
    # Đầu ra dự kiến: 
    # "Hi, I'm Bob and I'm 35 years old"
    # "I work as a Developer"

if __name__ == "__main__":
    main()
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Python online