Hướng Dẫn Nâng Cao: Lập Trình Hướng Đối Tượng (OOP) Trong Python Phần 2

Đăng ngày: 20/06/2026 • Tác giả: Quản trị viên
Hướng Dẫn Nâng Cao: Lập Trình Hướng Đối Tượng (OOP) Trong Python Phần 2

 

Lập Trình Hướng Đối Tượng (OOP) Trong Python: Hướng Dẫn Nâng Cao

Sau khi đã hiểu các khái niệm cơ bản về Lập trình hướng đối tượng (OOP) trong Python, bây giờ chúng ta sẽ đi sâu hơn vào các kỹ thuật nâng cao như method overriding, đa kế thừa (multiple inheritance), property decorator, magic methods, và metaclass.

1. Method Overriding – Ghi Đè Phương Thức

Ghi đè phương thức (Method Overriding) cho phép lớp con thay đổi hành vi của phương thức đã được định nghĩa trong lớp cha.

Ví dụ:

class Animal:
    def speak(self):
        return "Tạo âm thanh"

class Dog(Animal):
    def speak(self):  # Ghi đè phương thức speak()
        return "Gâu gâu"

class Cat(Animal):
    def speak(self):
        return "Meo meo"

dog = Dog()
cat = Cat()
print(dog.speak())  # Output: Gâu gâu
print(cat.speak())  # Output: Meo meo

💡 Lợi ích: Giúp tùy chỉnh hành vi của lớp con mà không thay đổi lớp cha.

2. Đa Kế Thừa (Multiple Inheritance)

Python hỗ trợ đa kế thừa, tức là một lớp có thể kế thừa từ nhiều lớp cha.

Ví dụ:

class A:
    def show(self):
        return "Lớp A"

class B:
    def display(self):
        return "Lớp B"

class C(A, B):  # Kế thừa từ cả A và B
    pass

c = C()
print(c.show())    # Output: Lớp A
print(c.display()) # Output: Lớp B

💡 Lưu ý: Đa kế thừa có thể gây xung đột phương thức, cần chú ý thứ tự kế thừa và sử dụng super() hợp lý.

3. Property Decorator – Biến Thuộc Tính Thành Phương Thức

Trong Python, @property giúp biến một phương thức thành thuộc tính.

Ví dụ:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def age(self):  # Getter
        return self._age

    @age.setter
    def age(self, new_age):  # Setter
        if new_age > 0:
            self._age = new_age
        else:
            raise ValueError("Tuổi phải lớn hơn 0")

p = Person("Thảo", 22)
print(p.age)  # Output: 22
p.age = 25
print(p.age)  # Output: 25

💡 Lợi ích: Kiểm soát quyền truy cập vào biến và giúp code rõ ràng hơn.

4. Magic Methods – Các Phương Thức Đặc Biệt

Magic Methods (còn gọi là Dunder Methods) là các phương thức có dấu gạch dưới kép (__method__), giúp tùy chỉnh hành vi của đối tượng.

Ví dụ: __str__ và __repr__

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

    def __str__(self):  # Dùng khi gọi print()
        return f"Cuốn sách: {self.title} của {self.author}"

    def __repr__(self):  # Dùng khi hiển thị trong shell
        return f"Book('{self.title}', '{self.author}')"

b = Book("Python OOP", "Thảo")
print(b)  # Output: Cuốn sách: Python OOP của Thảo

Một số magic methods hữu ích khác:

  • __add__: Tùy chỉnh phép cộng (+)
  • __len__: Tùy chỉnh len()
  • __eq__: Tùy chỉnh so sánh ==

Ví dụ tùy chỉnh phép cộng:

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

v1 = Vector(2, 3)
v2 = Vector(4, 5)
v3 = v1 + v2
print(v3.x, v3.y)  # Output: 6 8

💡 Lợi ích: Giúp làm việc với đối tượng theo cách trực quan hơn.

5. Metaclass – Tạo Class Một Cách Linh Hoạt

Metaclass là “class của class”, dùng để kiểm soát cách một class được tạo ra.

Ví dụ:

class Meta(type):
    def __new__(cls, name, bases, dct):
        print(f"Tạo class {name}")
        return super().__new__(cls, name, bases, dct)

class MyClass(metaclass=Meta):
    pass

# Output: Tạo class MyClass

💡 Lợi ích: Giúp kiểm soát quy trình tạo class, thường dùng trong thư viện lớn.

6. Tổng Kết

Bài viết này đã giúp bạn tìm hiểu các khía cạnh nâng cao của lập trình hướng đối tượng trong Python:

✔️ Ghi đè phương thức (Method Overriding) để thay đổi hành vi lớp cha.
✔️ Đa kế thừa (Multiple Inheritance) giúp kế thừa từ nhiều lớp cha.
✔️ Property Decorator (@property) giúp kiểm soát truy cập biến.
✔️ Magic Methods (__str__, __add__, v.v.) giúp làm việc với đối tượng dễ dàng hơn.
✔️ Metaclass giúp tạo class một cách linh hoạt.

 

💡 Bạn có câu hỏi gì về OOP nâng cao? Hãy để lại bình luận bên dưới!

Bài viết liên quan