Python là một ngôn ngữ lập trình hướng đối tượng, cho phép bạn tạo ra các lớp và đối tượng để mô hình hóa dữ liệu và hành vi. Trong bài viết này, chúng ta sẽ tìm hiểu cách tạo lớp và đối tượng, cách sử dụng kế thừa và tính đa hình trong Python.
Để tạo một lớp trong Python, ta sử dụng từ khóa class theo sau là tên lớp. Trong lớp, ta định nghĩa các thuộc tính dữ liệu và phương thức.
Ví dụ:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def sayHi(self):
print(f'Xin chào, tôi tên là {self.name}')
person = Person('John', 20)
print(person.name)
person.sayHi()
Ở đây, chúng ta định nghĩa lớp Person với phương thức khởi tạo init() để khởi tạo các thuộc tính name và age. Phương thức sayHi() cho phép đối tượng tự giới thiệu.
Ta tạo đối tượng person thuộc lớp Person với các tham số truyền vào. Sau đó có thể truy xuất các thuộc tính và gọi phương thức của đối tượng.
Như vậy, lớp định nghĩa bản thiết kế cho các đối tượng, còn đối tượng là thể hiện cụ thể của lớp với các giá trị cụ thể.
Kế thừa trong Python: Cách sử dụng tính chất kế thừa để tái sử dụng mã
Kế thừa là một tính năng quan trọng trong lập trình hướng đối tượng, cho phép một lớp con kế thừa các thuộc tính và phương thức từ lớp cha.
Để tạo một lớp con kế thừa từ lớp cha, ta chỉ cần định nghĩa lớp con và thêm tên lớp cha vào trong dấu ngoặc đơn:
class Person:
def __init__(self, name):
self.name = name
class Student(Person):
def __init__(self, name, school):
super().__init__(name)
self.school = school
Ở đây, lớp Student kế thừa từ lớp Person nên có quyền truy xuất và sử dụng các thuộc tính và phương thức của lớp Person.
Ưu điểm của kế thừa
-
Giúp tái sử dụng mã thay vì viết lại từ đầu
-
Lớp con chỉ cần định nghĩa thêm phần mở rộng, không phải viết lại phần cơ bản
-
Cấu trúc code rõ ràng và dễ quản lý hơn
-
Như vậy, kế thừa giúp chúng ta tái sử dụng mã một cách hiệu quả và tránh lặp lại code.
Để tạo đối tượng trong Python, ta sử dụng từ khóa class để định nghĩa lớp, sau đó dùng lớp này để khởi tạo các đối tượng.
Cú pháp khởi tạo đối tượng:
<tên_đối_tượng> = <tên_lớp>(<các tham số>)
Ví dụ:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Bob", 30)
Ở đây, chúng ta định nghĩa lớp Person với phương thức init() để khởi tạo các thuộc tính. Sau đó tạo đối tượng person của lớp Person với các tham số truyền vào.
Sau khi khởi tạo, ta có thể truy xuất các thuộc tính và gọi phương thức của đối tượng:
print(person.name)
print(person.age)
person.walk() # gọi phương thức của đối tượng
Như vậy, đối tượng cho phép chúng ta mô hình hóa các thực thể trong thế giới thực với các dữ liệu và hành vi riêng. Việc sử dụng đối tượng giúp chương trình dễ mở rộng và bảo trì hơn.
Đa hình trong Python: Khái niệm và cách sử dụng tính đa hình trong Python
Đa hình là một tính chất quan trọng của lập trình hướng đối tượng, cho phép các đối tượng thuộc các lớp con có cùng phương thức nhưng thực hiện các hành động khác nhau.
Ví dụ về đa hình trong Python:
class Animal:
def make_sound(self):
print("Some generic animal sound!")
class Dog(Animal):
def make_sound(self):
print("Woof woof!")
class Cat(Animal):
def make_sound(self):
print("Meow meow!")
dog = Dog()
cat = Cat()
dog.make_sound() # Woof woof!
cat.make_sound() # Meow meow!
Ở đây, cả Dog và Cat đều kế thừa từ lớp Animal và có cùng phương thức make_sound(). Tuy nhiên, mỗi lớp con lại cài đặt lại phương thức này theo cách riêng để phát ra âm thanh khác nhau.
Ưu điểm của đa hình:
-
Cho phép mã code linh hoạt, dễ mở rộng thêm các lớp con mới.
-
Không cần sửa đổi mã ở lớp cha khi bổ sung các lớp con.
-
Các đối tượng có cùng phương thức nhưng có thể hoạt động khác nhau.
-
Như vậy, đa hình là một tính chất quan trọng của lập trình hướng đối tượng, giúp tăng tính linh hoạt và tái sử dụng code.
Sự khác nhau giữa kế thừa và đa hình trong Python
Kế thừa
|
Đa hình
|
Cho phép lớp con kế thừa các thuộc tính và phương thức từ lớp cha
|
Cho phép các lớp con ghi đè lại phương thức của lớp cha nhưng có cài đặt khác
|
Tập trung vào việc tái sử dụng thuộc tính và phương thức
|
Tập trung vào việc cài đặt lại các phương thức đa dạng
|
Các lớp con chia sẻ chung interface (giao diện) của lớp cha
|
Các lớp con có thể cài đặt lại interface khác nhau
|
Được sử dụng để mở rộng chức năng của lớp cha
|
Được sử dụng để cài đặt các hành vi đa dạng cho các lớp cụ thể
|
Kết luận: như vậy, kế thừa và đa hình đều rất hữu ích trong lập trình hướng đối tượng. Kế thừa giúp tái sử dụng mã, còn đa hình giúp tăng tính linh hoạt và mở rộng hệ thống lớp dễ dàng hơn.