Inheritance trong OOP là một kỹ thuật cho phép một lớp có thể kế thừa thuộc tính và phương thức từ một lớp khác. Lớp con có thể được tạo ra bằng cách sử dụng từ khóa “class” và kế thừa các thuộc tính và phương thức của lớp cha.
Cú pháp khai báo của Inheritance trong Python:
class ChildClass(ParentClass):
# Code of child class
Trong đó:
ChildClass
: là tên của lớp con (subclass)ParentClass
: là tên của lớp cha (superclass) mà lớp con kế thừa từ đó.
Lớp con sẽ thừa hưởng tất cả các thuộc tính và phương thức của lớp cha, và có thể định nghĩa thêm các thuộc tính và phương thức riêng cho mình.
Các ví dụ minh họa:
1. Kế thừa từ lớp cha Person.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def display_info(self):
print(f"Name: {self.name}\nAge: {self.age}")
class Student(Person):
def __init__(self, name, age, major):
super().__init__(name, age)
self.major = major
def display_info(self):
super().display_info()
print(f"Major: {self.major}")
person1 = Person("Alice", 25)
person1.display_info()
student1 = Student("Bob", 20, "Computer Science")
student1.display_info()
2. Kế thừa từ lớp cha Animal.
class Animal:
def __init__(self, name, species):
self.name = name
self.species = species
def speak(self):
pass
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name, "Canine")
self.breed = breed
def speak(self):
return "Woof"
class Cat(Animal):
def __init__(self, name):
super().__init__(name, "Feline")
def speak(self):
return "Meow"
dog1 = Dog("Fido", "Labrador")
cat1 = Cat("Fluffy")
print(dog1.name, dog1.species, dog1.breed, dog1.speak())
print(cat1.name, cat1.species, cat1.speak())
3. Kế thừa từ lớp cha Shape.
class Shape:
def __init__(self, x, y):
self.x = x
self.y = y
def area(self):
pass
class Rectangle(Shape):
def __init__(self, x, y, width, height):
super().__init__(x, y)
self.width = width
self.height = height
def area(self):
return self.width * self.height
class Circle(Shape):
def __init__(self, x, y, radius):
super().__init__(x, y)
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
rect1 = Rectangle(0, 0, 10, 5)
circle1 = Circle(0, 0, 3)
print(rect1.area())
print(circle1.area())
4. Ví dụ về việc sử dụng inheritance để quản lý hệ thống.
Đây là một ví dụ về việc sử dụng inheritance để quản lý hệ thống người dùng trên Linux. Trong đó, chúng ta sẽ xây dựng một lớp cha User và các lớp con Admin và RegularUser, tương ứng với người dùng có quyền hạn đặc biệt và người dùng bình thường.
class User:
def __init__(self, username, password, full_name, email):
self.username = username
self.password = password
self.full_name = full_name
self.email = email
def login(self):
# some code to verify user's credentials
pass
def logout(self):
# some code to log out the user
pass
def get_username(self):
return self.username
def get_full_name(self):
return self.full_name
def get_email(self):
return self.email
class Admin(User):
def __init__(self, username, password, full_name, email, privileges):
super().__init__(username, password, full_name, email)
self.privileges = privileges
def grant_privilege(self, privilege):
self.privileges.append(privilege)
def revoke_privilege(self, privilege):
self.privileges.remove(privilege)
def get_privileges(self):
return self.privileges
class RegularUser(User):
def __init__(self, username, password, full_name, email, group):
super().__init__(username, password, full_name, email)
self.group = group
def join_group(self, group):
self.group.append(group)
def leave_group(self, group):
self.group.remove(group)
def get_group(self):
return self.group
Trong ví dụ này, lớp User là lớp cha chung cho tất cả các loại người dùng trên hệ thống, bao gồm cả Admin và RegularUser. Lớp Admin kế thừa từ lớp User và thêm vào các thuộc tính và phương thức đặc biệt cho phép quản lý quyền hạn của người dùng. Tương tự, lớp RegularUser cũng kế thừa từ lớp User và có thêm các thuộc tính và phương thức để quản lý nhóm của người dùng.
Ví dụ này chỉ mang tính chất minh họa, tuy nhiên, trong thực tế, việc sử dụng inheritance trong Python để quản lý hệ thống có thể giúp quản lý và triển khai hệ thống hiệu quả hơn.