1. Python là một ngôn ngữ lập trình hướng đối tượng
Python là một ngôn ngữ lập trình hướng đối tượng (OOP – object-oriented programming language). Hầu hết mọi thứ trong Python đều là đối tượng (object) với các thuộc tính (property) và phương thức (method) của riêng đối tượng đó.
Ví dụ, mọi giá trị dữ liệu trong Python đều được xem là một loại đối tượng (object). Khi gán một giá trị cho một biến (variable) thì bản chất biến đó sẽ tham chiếu đến một đối tượng lưu trữ giá trị dữ liệu đó.
Trước khi tìm hiểu về OOP trong Python, các bạn có thể tham khảo trước series bài học Phương pháp lập trình hướng đối tượng. Series bài học này giúp các bạn có tư duy cơ bản về OOP với C++, làm cơ sở để học và hiểu OOP trong các ngôn ngữ khác dễ dàng hơn.
2. Xây dựng lớp (class) trong Python
Một lớp (class) là một thiết kế (blueprint) hay mẫu (prototype) cho các đối tượng cùng kiểu. Ví dụ, chúng ta có một lớp Cat chứa tất cả thông tin về một con mèo như tên, màu sắc, cân nặng, hành động bắt chuột,… Một con mèo cụ thể là một đối tượng và sẽ có những thông tin chung của một con mèo nhưng với những giá trị khác nhau.
Trong Python, chúng ta sử dụng từ khóa class để tạo một lớp (class).
class Cat:
# Properties of Cat class
name = "Tom"
color = "grey and white"
# Methods of Cat class
def catchMouse(self):
print("Catch Jerry mouse.")
def sleep(self):
print("Take a nap.")
Trong ví dụ trên, chúng ta định nghĩa một lớp (class) Cat bao gồm các thuộc tính là name, color và các phương thức là catchMouse()
và sleep()
.
2.1. Tham số self của class trong Python
Tham số self
là một tham chiếu đến đối tượng hiện tại của lớp và được sử dụng để truy cập các biến thuộc về lớp đó.
class Cat:
# Properties of Cat class
name = "Tom"
color = "grey and white"
# Methods of Cat class
def catchMouse(self):
print(self.name, "catches Jerry mouse.")
def sleep(self):
print(self.name, "takes a nap.")
Không nhất thiết phải đặt tên tham số này là self
. Chúng ta có thể đặt bất cứ tên gì mà chúng ta thích. Nhưng Python sẽ mặc định hiểu tham số đầu tiên của bất kỳ hàm nào trong class là tham số self
.
class Cat:
# Properties of Cat class
name = "Tom"
color = "grey and white"
# Methods of Cat class
def catchMouse(abc):
print(abc.name, "catches Jerry mouse.")
def sleep(abc):
print(abc.name, "takes a nap.")
2.2. Câu lệnh pass với class trong Python
Định nghĩa của lớp (class) không được để trống. Nhưng nếu chưa biết các thuộc tính và phương thức của lớp để định nghĩa thì có thể dùng câu lệnh pass
trong class để tránh gặp lỗi.
class Person:
pass
3. Tạo đối tượng (object) trong Python
Đối tượng (object) là một thực thể cụ thể của lớp (class). Chúng ta có thể sử dụng tên của lớp để tạo một đối tượng. Khi một đối tượng được tạo ra thì Python sẽ cấp phát vùng nhớ để lưu trữ đối tượng đó.
class Cat:
# Properties of Cat class
name = "Tom"
color = "grey and white"
# Methods of Cat class
def catchMouse(self):
print(self.name, "catches Jerry mouse.")
def sleep(self):
print(self.name, "takes a nap.")
# create an object of Cat class
tom = Cat()
print(tom.name)
print(tom.color)
tom.catchMouse()
tom.sleep()
Kết quả
Tom
grey and white
Tom catches Jerry mouse.
Tom takes a nap.
Chúng ta có thể xóa một đối tượng với từ khóa del.
class Cat:
# Properties of Cat class
name = "Tom"
color = "grey and white"
# Methods of Cat class
def catchMouse(self):
print(self.name, "catches Jerry mouse.")
def sleep(self):
print(self.name, "takes a nap.")
tom = Cat()
print("Before delete tom object:", tom)
del tom
print("After delete tom object:", tom)
Kết quả
Before delete tom object: <__main__.Cat object at 0x0000023672FE7D60>
Traceback (most recent call last):
File "c:\python-examples\example.py", line 14, in <module>
print("After delete tom object:", tom)
NameError: name 'tom' is not defined
Ở bài này, chúng ta đã tìm hiểu cách tạo ra một lớp (class) và một đối tượng (object) trong Python một cách đơn giản nhất. Và trong Python, một lớp (class) lúc nào cũng có một hàm __init__()
được dựng sẵn (built-in). Hàm này được gọi là hàm khởi tạo (constructor) của lớp. Trong nhiều trường hợp, chúng ta cần xây dựng lại hàm __init__()
khi tạo một lớp. Chúng ta sẽ tìm hiểu kỹ về hàm __init__()
ở bài Hàm khởi tạo (constructor) của class trong Python.