Python - Lớp và Đối Tượng
Xin chào các bạn nhà lập trình Python mới nhảy! Hôm nay, chúng ta sẽ bắt đầu cuộc hành trình thú vị vào thế giới Lập Trình Hướng Đối Tượng (OOP) trong Python. Hãy cúi đôi vào ghế, vì chúng ta sắp thay đổi cách bạn suy nghĩ về mã lệnh!
Lớp là gì trong Python?
Hãy tưởng tượng bạn đang xây dựng một cỏ bản siêu thực. Bạn sẽ không tạo mỗi loài động vật từ đầu mới, phải không? Đó là nơi lớp đến vai trò quan trọng!
Một lớp trong Python giống như một bản kế hoạch hoặc mẫu để tạo ra các đối tượng. Nó xác định một tập hợp các thuộc tính và phương thức mà các đối tượng của lớp đó sẽ có.
Hãy tạo một lớp đơn giản để đại diện cho một chú chó:
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
print(f"{self.name} nói Woof!")
Trong ví dụ này, Dog
là lớp của chúng ta. Nó có các thuộc tính như name
và breed
, và một phương thức có tên là bark()
.
Tạo Lớp trong Python
Việc tạo một lớp chỉ cần sử dụng từ khóa class
theo sau là tên lớp. Hãy tạo một lớp Car
chi tiết hơn:
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer = 0
def drive(self, distance):
self.odometer += distance
print(f"Đã lái {distance} dặm. Tổng: {self.odometer} dặm")
def honk(self):
print("Beep beep!")
Ở đây, __init__
là một phương thức đặc biệt được gọi là hàm khởi tạo. Nó được gọi khi chúng ta tạo một đối tượng mới của lớp này.
Đối tượng là gì?
Nếu lớp là bản kế hoạch, đối tượng là "đồ vật" thực tế được tạo ra từ bản kế hoạch đó. Nó là một thể hiện cụ thể của một lớp.
Tạo Đối Tượng của Lớp trong Python
Việc tạo một đối tượng (cũng được gọi là khởi tạo) giống như sử dụng bản kế hoạch của chúng ta để tạo ra một điều gì đó thực tế. Hãy tạo một số chiếc car:
my_car = Car("Toyota", "Corolla", 2020)
your_car = Car("Honda", "Civic", 2019)
print(my_car.make) # Output: Toyota
your_car.drive(50) # Output: Đã lái 50 dặm. Tổng: 50 dặm
my_car.honk() # Output: Beep beep!
Mỗi chiếc car là một đối tượng riêng biệt với một tập hợp các thuộc tính và phương thức của riêng nó.
Truy Cập Các Thuộc Tính của Đối Tượng trong Python
Chúng ta có thể truy cập các thuộc tính của một đối tượng bằng cách sử dụng dấu chấm. Hãy kiểm tra chiếc car của chúng ta:
print(f"Chiếc car của tôi là một {my_car.year} {my_car.make} {my_car.model}")
# Output: Chiếc car của tôi là một 2020 Toyota Corolla
Các Thuộc Tính Độc Quyền của Lớp trong Python
Python lớp có một số thuộc tính độc quyền. Hãy khám phá chúng:
class MyClass:
x = 5
print(MyClass.__name__) # Output: MyClass
print(MyClass.__module__) # Output: __main__
print(MyClass.__dict__) # Output: {'__module__': '__main__', 'x': 5, ...}
Lớp Độc Quyền của Các Kiểu Dữ Liệu Python
Bạn có biết rằng ngay cả các kiểu dữ liệu cơ bản của Python cũng là các đối tượng? Hãy kiểm tra nó:
print(type(5)) # Output: <class 'int'>
print(type("Hello")) # Output: <class 'str'>
print(type([1, 2, 3])) # Output: <class 'list'>
Mọi thứ trong Python đều là một đối tượng!
Thu Hồi Động Cơ (Đánh Dấu Đối Tượng) trong Python
Trong Python, chúng ta không cần phải tự đánh dấu đối tượng. Bộ thu hồi rác của Python sẽ tự động quản lý khi một đối tượng không còn được sử dụng.
import gc
# Tạo một đối tượng
my_car = Car("Toyota", "Corolla", 2020)
# Xóa tham chiếu
my_car = None
# Ép buộc thu hồi rác (thường không cần thiết)
gc.collect()
Ẩn Thông Tin trong Python
Trong OOP, chúng ta thường muốn kiểm soát quyền truy cập vào một số thuộc tính. Python sử dụng quy ước tiền tố các thuộc tính bằng dấu gạch dưới:
class BankAccount:
def __init__(self, balance):
self._balance = balance # Thuộc tính được bảo vệ
self.__secret = "shh" # Thuộc tính riêng tư
def deposit(self, amount):
self._balance += amount
def get_balance(self):
return self._balance
account = BankAccount(1000)
print(account._balance) # Output: 1000 (nhưng chúng ta không nên làm điều này!)
print(account.__secret) # Điều này sẽ gây ra một AttributeError
Dưới đây là bảng tóm tắt các phương thức mà chúng ta đã conver:
Phương thức | Mô tả |
---|---|
__init__(self, ...) |
Phương thức khởi tạo, được gọi khi tạo một đối tượng mới |
__str__(self) |
Trả về một chuỗi biểu diễn của đối tượng |
__repr__(self) |
Trả về một chuỗi biểu diễn chi tiết của đối tượng |
__len__(self) |
Xác định hành vi cho hàm len()
|
__getitem__(self, key) |
Xác định hành vi cho các thao tác lấy phần tử |
__setitem__(self, key, value) |
Xác định hành vi cho việc gán giá trị cho các phần tử được chỉ định |
Và đó là thế! Bạn đã bước ra đầu tiên vào thế giới Lập Trình Hướng Đối Tượng trong Python. Hãy nhớ, luyện tập sẽ làm bạn hoàn hảo. Thử tạo ra các lớp và đối tượng của riêng bạn, và sớm bạn sẽ có thể xây dựng các chương trình phức tạp và hiệu quả như một chuyên gia!
Credits: Image by storyset