Khóa học python

Ghi đè phương thức và Nạp chồng phương thức trong Python

0 phút đọc

Trong lập trình hướng đối tượng (OOP), ghi đè phương thức (method overriding) và nạp chồng phương thức (method overloading) là hai khái niệm quan trọng giúp tăng tính linh hoạt và khả năng tái sử dụng mã nguồn. Mặc dù Python không hỗ trợ nạp chồng phương thức theo cách truyền thống như các ngôn ngữ khác (ví dụ: Java, C++), nhưng vẫn có cách để đạt được hành vi tương tự. Bài viết này sẽ giải thích chi tiết về ghi đè phương thức và nạp chồng phương thức trong Python, kèm theo các ví dụ minh họa.

Ghi đè phương thức (Method Overriding)

Ghi đè phương thức là quá trình mà một lớp con cung cấp một triển khai cụ thể cho một phương thức đã được định nghĩa trong lớp cha. Điều này cho phép lớp con thay đổi hoặc mở rộng chức năng của phương thức lớp cha.

Ví dụ về ghi đè phương thức

class Animal:
    def sound(self):
        return "Some generic animal sound"

class Dog(Animal):
    def sound(self):
        return "Bark"

class Cat(Animal):
    def sound(self):
        return "Meow"

# Tạo các đối tượng
dog = Dog()
cat = Cat()

# Gọi phương thức sound
print(dog.sound())  # Output: Bark
print(cat.sound())  # Output: Meow

Trong ví dụ trên, phương thức sound được định nghĩa trong lớp Animal và được ghi đè trong các lớp con DogCat. Khi gọi phương thức sound trên các đối tượng dogcat, Python sẽ sử dụng triển khai của phương thức trong lớp con tương ứng.

Sử dụng super() trong ghi đè phương thức

Bạn có thể sử dụng hàm super() để gọi phương thức của lớp cha từ lớp con.

class Animal:
    def sound(self):
        return "Some generic animal sound"

class Dog(Animal):
    def sound(self):
        original_sound = super().sound()
        return f"{original_sound} and Bark"

# Tạo đối tượng
dog = Dog()

# Gọi phương thức sound
print(dog.sound())  # Output: Some generic animal sound and Bark

Trong ví dụ trên, phương thức sound trong lớp Dog gọi phương thức sound của lớp Animal bằng cách sử dụng super(), sau đó thêm vào chuỗi "and Bark".

Nạp chồng phương thức (Method Overloading)

Nạp chồng phương thức là quá trình định nghĩa nhiều phương thức cùng tên nhưng khác nhau về số lượng hoặc kiểu tham số. Python không hỗ trợ nạp chồng phương thức theo cách truyền thống, nhưng có thể đạt được hành vi tương tự bằng cách sử dụng các tham số mặc định hoặc các tham số biến độ dài.

Ví dụ về nạp chồng phương thức bằng tham số mặc định

class MathOperations:
    def add(self, a, b=0, c=0):
        return a + b + c

# Tạo đối tượng
math_ops = MathOperations()

# Gọi phương thức add với các số lượng tham số khác nhau
print(math_ops.add(1))        # Output: 1
print(math_ops.add(1, 2))     # Output: 3
print(math_ops.add(1, 2, 3))  # Output: 6

Trong ví dụ trên, phương thức add có ba tham số, trong đó bc có giá trị mặc định là 0. Điều này cho phép gọi phương thức add với một, hai hoặc ba tham số.

Ví dụ về nạp chồng phương thức bằng tham số biến độ dài

class MathOperations:
    def add(self, *args):
        return sum(args)

# Tạo đối tượng
math_ops = MathOperations()

# Gọi phương thức add với các số lượng tham số khác nhau
print(math_ops.add(1))           # Output: 1
print(math_ops.add(1, 2))        # Output: 3
print(math_ops.add(1, 2, 3))     # Output: 6
print(math_ops.add(1, 2, 3, 4))  # Output: 10

Trong ví dụ trên, phương thức add sử dụng tham số biến độ dài *args, cho phép nhận một số lượng tham số không xác định. Phương thức này sẽ tính tổng các tham số được truyền vào.

So sánh giữa ghi đè phương thức và nạp chồng phương thức

Đặc điểm Ghi đè phương thức Nạp chồng phương thức
Khái niệm Định nghĩa lại phương thức trong lớp con với cùng tên và tham số như phương thức trong lớp cha Định nghĩa nhiều phương thức cùng tên nhưng khác nhau về số lượng hoặc kiểu tham số
Thời điểm quyết định Thời gian chạy (runtime) Thời gian biên dịch (compile-time)
Yêu cầu kế thừa Không bắt buộc
Mục đích Thay đổi hoặc mở rộng chức năng của phương thức lớp cha Tăng tính linh hoạt và khả năng tái sử dụng của phương thức

Kết luận

Ghi đè phương thức và nạp chồng phương thức là hai khái niệm quan trọng trong lập trình hướng đối tượng, giúp tăng tính linh hoạt và khả năng tái sử dụng mã nguồn. Mặc dù Python không hỗ trợ nạp chồng phương thức theo cách truyền thống, nhưng bạn có thể sử dụng các tham số mặc định hoặc tham số biến độ dài để đạt được hành vi tương tự. Hiểu và sử dụng đúng các khái niệm này sẽ giúp bạn viết mã nguồn rõ ràng, dễ bảo trì và hiệu quả hơn. Hy vọng bài viết này đã cung cấp cho bạn một cái nhìn tổng quan và chi tiết về ghi đè phương thức và nạp chồng phương thức trong Python.

Avatar
Được viết bởi

TechMely Team

Gợi ý câu hỏi phỏng vấn

entry

Liệt kê các kiểu dữ liệu trong Python?

entry

Biến cục bộbiến toàn cục trong Python là gì?

entry

Trong Python có những built-in types nào?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào