Khóa học python

Tính Thừa Kế trong Python

0 phút đọc

Tính thừa kế (inheritance) là một trong những nguyên lý cơ bản của lập trình hướng đối tượng (OOP). Nó cho phép một lớp (class) kế thừa các thuộc tính và phương thức từ một lớp khác. Điều này giúp tái sử dụng mã nguồn và tổ chức mã một cách logic hơn. Bài viết này sẽ hướng dẫn chi tiết về tính thừa kế trong Python, kèm theo các ví dụ minh họa cụ thể.

Giới thiệu về Tính Thừa Kế

Tính Thừa Kế là gì?

Tính thừa kế là cơ chế cho phép một lớp (được gọi là lớp con hoặc lớp dẫn xuất) kế thừa các thuộc tính và phương thức từ một lớp khác (được gọi là lớp cha hoặc lớp cơ sở). Điều này giúp tái sử dụng mã nguồn và giảm thiểu sự trùng lặp mã.

class Parent:
    def __init__(self, name):
        self.name = name

    def display(self):
        print(f"Parent Name: {self.name}")

class Child(Parent):
    def __init__(self, name, age):
        super().__init__(name)
        self.age = age

    def display(self):
        super().display()
        print(f"Child Age: {self.age}")

# Tạo đối tượng từ lớp Child
child = Child("John", 12)
child.display()

Output:

Parent Name: John
Child Age: 12

Lợi ích của Tính Thừa Kế

  • Tái sử dụng mã nguồn: Giảm thiểu sự trùng lặp mã bằng cách sử dụng lại các thuộc tính và phương thức từ lớp cha.
  • Tổ chức mã logic: Giúp tổ chức mã nguồn một cách logic hơn, dễ hiểu và dễ bảo trì.
  • Mở rộng chức năng: Cho phép mở rộng chức năng của lớp cha mà không cần thay đổi mã nguồn của lớp cha.

Các Loại Thừa Kế trong Python

Thừa Kế Đơn (Single Inheritance)

Thừa kế đơn là khi một lớp con kế thừa từ một lớp cha duy nhất.

class Animal:
    def sound(self):
        print("Animal makes a sound")

class Dog(Animal):
    def sound(self):
        print("Dog barks")

# Tạo đối tượng từ lớp Dog
dog = Dog()
dog.sound()

Output:

Dog barks

Thừa Kế Đa (Multiple Inheritance)

Thừa kế đa là khi một lớp con kế thừa từ nhiều lớp cha.

class Bird:
    def fly(self):
        print("Bird can fly")

class Mammal:
    def run(self):
        print("Mammal can run")

class Bat(Bird, Mammal):
    pass

# Tạo đối tượng từ lớp Bat
bat = Bat()
bat.fly()
bat.run()

Output:

Bird can fly
Mammal can run

Thừa Kế Bậc Thang (Multilevel Inheritance)

Thừa kế bậc thang là khi một lớp con kế thừa từ một lớp con khác, tạo thành một chuỗi thừa kế.

class Animal:
    def eat(self):
        print("Animal eats")

class Dog(Animal):
    def bark(self):
        print("Dog barks")

class Puppy(Dog):
    def weep(self):
        print("Puppy weeps")

# Tạo đối tượng từ lớp Puppy
puppy = Puppy()
puppy.eat()
puppy.bark()
puppy.weep()

Output:

Animal eats
Dog barks
Puppy weeps

Thừa Kế Phân Cấp (Hierarchical Inheritance)

Thừa kế phân cấp là khi nhiều lớp con kế thừa từ một lớp cha duy nhất.

class Animal:
    def sound(self):
        print("Animal makes a sound")

class Dog(Animal):
    def sound(self):
        print("Dog barks")

class Cat(Animal):
    def sound(self):
        print("Cat meows")

# Tạo đối tượng từ lớp Dog và Cat
dog = Dog()
cat = Cat()
dog.sound()
cat.sound()

Output:

Dog barks
Cat meows

Thừa Kế Lai (Hybrid Inheritance)

Thừa kế lai là sự kết hợp của nhiều loại thừa kế khác nhau.

class Animal:
    def sound(self):
        print("Animal makes a sound")

class Bird(Animal):
    def fly(self):
        print("Bird can fly")

class Mammal(Animal):
    def run(self):
        print("Mammal can run")

class Bat(Bird, Mammal):
    pass

# Tạo đối tượng từ lớp Bat
bat = Bat()
bat.sound()
bat.fly()
bat.run()

Output:

Animal makes a sound
Bird can fly
Mammal can run

Ghi Đè Phương Thức (Method Overriding)

Ghi đè phương thức là khi 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.

class Animal:
    def sound(self):
        print("Animal makes a sound")

class Dog(Animal):
    def sound(self):
        print("Dog barks")

# Tạo đối tượng từ lớp Dog
dog = Dog()
dog.sound()

Output:

Dog barks

Sử Dụng super() để Gọi Phương Thức của Lớp Cha

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

class Animal:
    def __init__(self, name):
        self.name = name

    def sound(self):
        print(f"{self.name} makes a sound")

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed

    def sound(self):
        super().sound()
        print(f"{self.name} barks")

# Tạo đối tượng từ lớp Dog
dog = Dog("Buddy", "Golden Retriever")
dog.sound()

Output:

Buddy makes a sound
Buddy barks

Đa Hình (Polymorphism)

Đa hình là khả năng của các đối tượng thuộc các lớp khác nhau có thể được xử lý thông qua cùng một giao diện.

class Animal:
    def sound(self):
        pass

class Dog(Animal):
    def sound(self):
        print("Dog barks")

class Cat(Animal):
    def sound(self):
        print("Cat meows")

def make_sound(animal):
    animal.sound()

# Tạo đối tượng từ lớp Dog và Cat
dog = Dog()
cat = Cat()
make_sound(dog)
make_sound(cat)

Output:

Dog barks
Cat meows

Kiểm Tra Quan Hệ Thừa Kế

Hàm isinstance()

Hàm isinstance() được sử dụng để kiểm tra xem một đối tượng có phải là instance của một lớp cụ thể hay không.

class Animal:
    pass

class Dog(Animal):
    pass

dog = Dog()
print(isinstance(dog, Dog))  # Output: True
print(isinstance(dog, Animal))  # Output: True
print(isinstance(dog, object))  # Output: True

Hàm issubclass()

Hàm issubclass() được sử dụng để kiểm tra xem một lớp có phải là lớp con của một lớp khác hay không.

class Animal:˝
    pass

class Dog(Animal):
    pass

print(issubclass(Dog, Animal))  # Output: True
print(issubclass(Dog, object))  # Output: True
print(issubclass(Animal, Dog))  # Output: False

Các Lưu Ý Khi Sử Dụng Tính Thừa Kế

Tránh Sử Dụng Quá Nhiều Thừa Kế

Sử dụng quá nhiều thừa kế có thể làm cho mã nguồn trở nên phức tạp và khó bảo trì. Hãy cân nhắc sử dụng các kỹ thuật khác như composition khi cần thiết.

Sử Dụng super() Đúng Cách

Khi ghi đè phương thức của lớp cha, hãy sử dụng super() để gọi phương thức của lớp cha nếu cần thiết.

Đảm Bảo Tính Đúng Đắn của Quan Hệ Thừa Kế

Chỉ sử dụng thừa kế khi có mối quan hệ "is-a" giữa các lớp. Ví dụ, một con chó "là" một động vật, do đó, lớp Dog có thể kế thừa từ lớp Animal.

Kết Luận

Trong bài viết này, chúng ta đã tìm hiểu về tính thừa kế trong Python, bao gồm các loại thừa kế, ghi đè phương thức, sử dụng super(), và đa hình. Hy vọng rằng các ví dụ minh họa này sẽ giúp bạn hiểu rõ hơn về cách làm việc với tính thừa kế trong Python và áp dụng chúng vào các bài toán thực tế của mình.

Avatar
Được viết bởi

TechMely Team

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

entry

Bạn có thể nói sự khác biệt giữa cấu trúc dữ liệu tuyến tính và phi tuyến tính?

entry

Danh sách liên kết là tuyến tính hay phi tuyến tính?

entry

Kế thừa là gì?

Bình luận

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

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