Bài 3 - Lớp (Class) và Đối Tượng (Object) trong Python
Bài 3 - Lớp (Class) và Đối Tượng (Object) trong Python
I. Giới thiệu
Trong lập trình hướng đối tượng (OOP - Object-Oriented Programming), Class (Lớp) và Object (Đối tượng) là hai khái niệm cơ bản nhất. Python là một ngôn ngữ hỗ trợ mạnh mẽ OOP, giúp tổ chức mã nguồn một cách rõ ràng, dễ bảo trì và tái sử dụng.
1. Class là gì?
- Class là một bản thiết kế (blueprint) để tạo ra các đối tượng.
- Nó định nghĩa các thuộc tính (attributes) và phương thức (methods) mà đối tượng sẽ có.
2. Object là gì?
- Object là một thể hiện (instance) cụ thể của một lớp.
- Một lớp có thể tạo ra nhiều đối tượng khác nhau.
II. Cú pháp cơ bản của Class và Object
1. Định nghĩa một Class
Cách đặt tên một Class - Đặt tên theo phong cách CapWords (hay CamelCase), nghĩa là chữ cái đầu tiên của từ trong tên của Class được viết hoa và không có dấu gạch dưới giữa các từ, điều này giúp code dễ đọc, và bảo đảm tính nhất quán trong các dự án.
class TenClass:
# Thuộc tính lớp (class attribute)
class_attribute = "Giá trị chung cho mọi đối tượng"
# Hàm khởi tạo (constructor)
def __init__(self, param1, param2):
self.param1 = param1 # Thuộc tính đối tượng (instance attribute)
self.param2 = param2
# Phương thức (method)
def method_name(self):
return f"Xử lý {self.param1} và {self.param2}"
2. Tạo một Object
# Tạo đối tượng từ lớp
object1 = TenClass("Giá trị 1", "Giá trị 2")
# Truy cập thuộc tính
print(object1.param1) # Output: Giá trị 1
# Gọi phương thức
print(object1.method_name()) # Output: Xử lý Giá trị 1 và Giá trị 2
III. Các thành phần quan trọng trong Class
1. __init__
(Constructor)
- Được gọi tự động khi tạo đối tượng.
- Dùng để khởi tạo các thuộc tính.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Alice", 25)
print(person.name) # Output: Alice
2. Thuộc tính (Attributes)
- Thuộc tính lớp (Class Attribute): Dùng chung cho tất cả đối tượng.
- Thuộc tính đối tượng (Instance Attribute): Riêng của từng đối tượng.
class Car:
# Class attribute
wheels = 4
def __init__(self, brand, model):
# Instance attributes
self.brand = brand
self.model = model
car1 = Car("VinFast", "VF5")
print(car1.wheels) # Output: 4 (Class attribute)
print(car1.brand) # Output: VinFast (Instance attribute)
3. Phương thức (Methods)
- Là các hàm được định nghĩa bên trong lớp.
- Luôn có tham số
self
để truy cập thuộc tính của đối tượng.
class Circle:
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
circle = Circle(5)
print(circle.area()) # Output: 78.5
IV. Kế thừa (Inheritance)
- Cho phép một lớp con kế thừa thuộc tính và phương thức từ lớp cha.
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return "Âm thanh của động vật"
class Dog(Animal): # Lớp Dog kế thừa từ Animal
def speak(self): # Ghi đè phương thức
return f"{self.name} nói: Gâu gâu!"
dog = Dog("Bobby")
print(dog.speak()) # Output: Bobby nói: Gâu gâu!
V. Các phương thức đặc biệt (Magic/Dunder Methods)
- Bắt đầu và kết thúc bằng
__
(double underscore). - Ví dụ:
__str__
,__len__
,__add__
.
class Book:
def __init__(self, title, pages):
self.title = title
self.pages = pages
def __str__(self):
return f"Book: {self.title}, Pages: {self.pages}"
def __len__(self):
return self.pages
book = Book("Python OOP", 300)
print(book) # Output: Book: Python OOP, Pages: 300
print(len(book)) # Output: 300
VI. Bài tập thực hành
Bài 1: Tạo lớp SinhVien
với các thuộc tính ten
, tuoi
, diem
và phương thức display_info()
in ra thông tin.
Bài 2: Tạo lớp Rectangle
với phương thức tính diện tích và chu vi.
Bài 3: Tạo lớp BankAccount
với phương thức deposit()
, withdraw()
và kiểm tra số dư.
VII. Tổng kết
- Class là bản thiết kế, Object là thể hiện cụ thể.
__init__
dùng để khởi tạo đối tượng.- Kế thừa giúp tái sử dụng mã nguồn.
- Magic Methods giúp định nghĩa các hành vi đặc biệt.
Lập trình hướng đối tượng giúp mã nguồn dễ quản lý, mở rộng và bảo trì hơn. 🚀