Lập trình hướng đối tượng là một kỹ thuật hỗ trợ, cho phép lập trình viên trực tiếp làm việc với các đối tượng mà họ định nghĩa. Giúp tăng năng suất, đơn giản hóa độ phức tạp khi bảo trì cũng như mở rộng phần mềm.
Hiện nay có khá nhiều ngôn ngữ lập trình theo hướng đối tượng như C++, Java, PHP, ... và còn cả Python.
Một vài thuật ngữ hướng đối tượng
- Lớp (Class): kiểu dữ liệu do người dùng định nghĩa, tập hợp nhiều thuộc tính đặc trưng cho đối tượng được tạo ra từ lớp đó, các thuộc tính là các biến thành viên hoặc phương thức.
- Đối tượng (Object): Một thể hiện cụ thể của cấu trúc dữ liệu được định nghĩa trong lớp. Một đối tượng bao gồm cả các biến thành viên và phương thức.
- Thuộc tính (Data member): thuộc tính được định nghĩa trong lớp.
- Phương thức (Method): được định nghĩa trong lớp nhằm thực hiện một công việc.
- Kế thừa (Inheritace):tính chất của các ngôn ngữ lập trình hướng đối tượng cho phép các lớp mở rộng từ 1 lớp có sẵn.
Định nghĩa lớp
Cú pháp
class ClassName: statement_1 . . statement_n
Ví dụ
#!/usr/bin/python class Animal: def __init__(self, genus, age): self.genus = genus self.age = age def foot(self): print ("Gobble") def say(self): pass
Trong đó:
- Dòng 3: phương thức
__init__
có là constructor, phương thức này tự động được gọi khi 1 đối tượng được tạo ra. Phương thức này có thể có hoặc không các tham số, tham số đầu tiên bắt buộc phải làself
. - Dòng 4, 5: các thuộc tính trong lớp bắt buộc phải được truy xuất thông qua tham số
self
, các thuộc tính sẽ được tạo ra khi được gán lần đầu tiên. - Dòng 6, 8: khai bá phương thức, tham số đầu tiên trong phương thức phải là
self
.
Lưu ý:
- Không thể khai báo 2 phương thức
__init__
trong cùng 1 class. self
dùng để tham chiếu đến chính đối tượng đang được thao tác.
Tạo đối tượng
Xét ví dụ sau:
dog = Animal('Dog', 10)
Ví dụ trên là cách để tạo một đối tượng từ một class, các tham số truyền vào khi tạo đối tượng sẽ tương ứng với các tham số trong phương thức __init__
của lớp đó.
Truy cập các thuộc tính của đối tượng
Có thể truy cập các thuộc tính của đối tượng thông qua toán tử chấm .
.
Ví dụ
dog.genus dog.eat()
Có thể thêm mới, hoặc cập nhật lại các thuộc tính cho đối tượng sau khi đã khởi tạo nó.
Ví dụ
dog.name = "Rex" dog.age = 11
Ngoài các cách thông thường để truy cập các thuộc tính, Python còn cho phép truy cập thông qua một số phương thức dựng sẵn:
Hàm | Mô tả |
---|---|
getattr(obj, name[, default]) |
Lấy 1 thuộc tính của đối tượng, nếu đối tượng này không có thuộc tính đó thì giá trị trả về là default . Khi default không được truyền vào thì giá trị trả về là None . |
hasattr(obj, name) |
Kiểm tra thuộc tính có tồn tại trong đối tượng này hay không, nếu có thì trả về True và ngược lại. |
setattr(obj, name, value) |
Gán giá trị value cho thuộc tính trong đối tượng. |
delattr(obj, name) |
Xoá thuộc tính trong đối tượng. |
Ví dụ
#!/usr/bin/python class Animal: def __init__(self, genus, age): self.genus = genus self.age = age def foot(self): print("Gobble") def say(self): pass dog = Animal('Dog', 10) if(not(hasattr(dog, 'name'))): setattr(dog, 'name', 'Rex') print("Name: ", dog.name) print("Age: ", dog.age)