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 RetrieverDù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.
Thử thách
Trung bìnhTrong 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à ageemployee.py: Chứa lớp Employee kế thừa từ Persondriver.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()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
1Nền tảng về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTham số selfPhương thứcThuộc tínhPhương thức khởi tạo (__init__)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnHàm super()Ghi đè phương thứcKế thừa đa lớpThứ tự phân giải phương thứcÔn tập: hệ thống phân cấp nhân viên2Decorator
Giới thiệu về decoratorDecorator thuộc tínhDecorator phương thức tĩnhDecorator phương thức lớp5Tính đa hình
Xem lại cách ghi đè phương thứcKiểu gõ vịtLớp và phương thức trừu tượngThiết kế giao diệnÔn tập: máy tính hình học8Các khái niệm OOP nâng cao
Kết hợp và kế thừaMixinPhương thức tĩnh và phương thức lớpDecorator lớpTrình quản lý ngữ cảnhTự luyện tập: Trình biên dịch Python online