Lập trình hướng đối tượng python
Lập trình hướng đối tượng là phương thức tiên tiến được ứng dụng trong nhiều ngôn ngữ lập trình trên thế giới, được ưa chuộng sử dụng bởi các lập trình viên do lập trình hướng đối tượng giúp tinh gọn, đơn giản hóa các dòng lệnh phức tạp. Python là ngôn ngữ lập trình ứng dụng phương thức này một cách triệt để, góp phần khiến python trở nên đơn giản, dễ dùng. Vậy hãy cùng MCI tìm hiểu lập trình hướng đối tượng python là như thế nào nhé.
Nội dung bài viết
Lập trình hướng đối tượng là phương thức tiên tiến được ứng dụng trong nhiều ngôn ngữ lập trình trên thế giới, được ưa chuộng sử dụng bởi các lập trình viên do lập trình hướng đối tượng giúp tinh gọn, đơn giản hóa các dòng lệnh phức tạp. Python là ngôn ngữ lập trình ứng dụng phương thức này một cách triệt để, góp phần khiến python trở nên đơn giản, dễ dùng. Vậy hãy cùng MCI tìm hiểu lập trình hướng đối tượng python là như thế nào nhé.
Tổng quan lập trình hướng đối tượng Python
Lập trình hướng đối tượng (tiếng Anh là Object-Oriented Programming - OOP) là phương thức kỹ thuật trong đó lập trình viên định nghĩa một đối tượng và gọi đối tượng đó ra sử dụng khi cần bằng những ký hiệu hoặc tên được nhà lập trình định nghĩ trước đó.
Lập trình hướng đối tượng Python còn được gọi là DRY (Don't Repeat Yourself) ám chỉ việc hạn chế việc sử dụng lại những dòng lệnh tương tự nhau.
Phương thức này giúp rút ngắn thời gian thực hiện dự án, đơn giản hóa câu lệnh, giảm dung lượng file code, dễ dàng bảo trì, tối ưu và mở rộng trong tương lai.
Nguyên lý cơ bản của OOP trong python
Lập trình hướng đối tượng Python tuân theo 3 nguyên lý sau:
- Tính kế thừa (Inheritance): cho phép một class sử dụng các thuộc tính và phương thức từ các class khác đã được định nghĩa mà không cần định nghĩa lại.
- Tính đóng gói (Encapsulation): là nguyên lý chỉ các dòng lệnh thực thi bên trong một đối tượng không thể bị thay đổi hoặc can thiệp trực tiếp từ bên ngoài
- Tính đa hình (Polymorphism): là nguyên lý chỉ việc nhiều class có những cách thức hoạt động tương tự nhau nhưng có thể thực thi theo cách thức khác nhau.
Một số khái niệm thuật ngữ lập trình hướng đối tượng python bạn cần nắm
Đối tượng (Object) và Lớp (Class)
Đối tượng (tiếng Anh: Object) trong lập trình hướng đối tượng python là một thực thể được quy định đặc tính, hành vi
Lớp (tiếng Anh: Class): một kiểu dữ liệu do người dùng định nghĩa bằng những dòng lệnh, quy định các thuộc tính do người dùng tự tạo
Cấu trúc cú pháp:
class ClassName:
statement_1
...
statement_n
Khác nhau giữa đối tượng và hành vi
Đối tượng (Object) có thuộc tính và hành vi được quy định
Lớp (Class) như một định dạng mẫu mô tả thuộc tính và hành vi của đối tượng mà lớp đó hỗ trợ
=> Một đối tượng (Object) là thực thể (instance) của một lớp (Class) trong lập trình hướng đối tượng python
Ví dụ
class Dog:
# thuộc tính lớp
loaicon = "Chó"
# thuộc tính đối tượng
def __init__(self, tencho, giongcho ,maulong):
self.tencho= tencho
self.giongcho= giongcho
self.maulong= maulong
# Khởi tạo class Dog
Chihuahua = Dog(‘’kiki” ,"Chihuahua", "Đỏ")
Bulldog = Dog(“ben” ,"Bulldog", "Vàng")
Pug = Dog(“bắc” ,"Pug", "Xanh")
# Truy cập thuộc tính của class
print("Chihuahua là {}.".format(Chihuahua.__class__.loaicon))
print("Bulldog là {}.".format(Bulldog.__class__. loaicon))
print("Pug cũng là {}.".format(Pug.__class__. loaicon))
# Truy cập các thuộc tính thực thể
print("Chó {} có màu {}, thuộc giống chó {}".format( Chihuahua.tenxe, Chihuahua.mausac, Chihuahua.nguyenlieu))
print("Chó {} có màu {}, thuộc giống chó {}".format( Bulldog.tenxe, Bulldog.mausac, Bulldog.nguyenlieu))
print("Chó {} có màu {}, thuộc giống chó {}".format( Pug.tenxe, Pug.mausac, Pug.nguyenlieu))
Kết quả:
Chihuahua là Chó.
Bulldog là Chó.
Pug cũng là Chó.
Chó kiki có màu Đỏ, thuộc giống chó Chihuahua.
Chó ben có màu Đỏ, thuộc giống chó Bulldog.
Chó bắc có màu Đỏ, thuộc giống chó Pug.
Trong phần thuộc tính đối tượng:
- Dòng 1: __init__ là phương thức tự động được gọi khi 1 đối tượng được tạo. 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: quy định các thuộc tính trong class. Lưu ý bắt buộc phải truy xuất các class thông qua tham số 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.
Phương thức (Method)
Phương thức (tiếng Anh: Method) trong lập trình hướng đối tượng python chính là các hàm lệnh bên trong cấu tạo của một Class, có chức năng chính là xác định hành vi của đối tượng (Object)
Ví dụ
class Dog:
# thuộc tính đối tượng
def __init__(self, tencho, giongcho ,maulong):
self.tencho= tencho
self.giongcho= giongcho
self.maulong= maulong
# phương thức
def ngoi(self, mucdich):
return "{} đang ngồi để {}".format(self.tencho,mucdich)
def chay(self):
return "{} đang chạy trên vỉa hè".format(self.tencho)
def sua(self):
return "{} đang sủa".format(self.tencho)
# Khởi tạo class Dog
Chihuahua = Dog(‘’kiki” ,"Chihuahua", "Đỏ")
Bulldog = Dog(“ben” ,"Bulldog", "Vàng")
Pug = Dog(“bắc” ,"Pug", "Xanh")
# Gọi các phương thức của thực thể
print(kiki.ngoi("liếm lông"))
print(ben.chay())
print(bắc.sua())
Kết quả là:
kiki đang ngồi để liếm lông
ben đang chạy trên vỉa hè
bắc đang sủa
Trong ví dụ trên, các bạn có thể thấy có 3 phương thức được định nghĩa bao gồm: ngoi(), chay(), sua()
Tính Kế Thừa (Inheritance)
Tính kế thức trong lập trình hướng đối tượng python cho phép một class có thể sử dụng các thuộc tính và phương thức từ các class đã được định nghĩa trước đó
Có thể hiểu đơn giản hơn, lớp kế thừa thuộc tính của lớp khác được gọi là lớp con, lớp đã được định nghĩa trước đó gọi là lớp cha
Class con kế thừa các thành phần của class cha và có thể mở rộng và bổ sung các thành phần mới
Ví dụ:
class Dog:
# thuộc tính đối tượng
def __init__(self, tencho, giongcho ,maulong):
self.tencho= tencho
self.giongcho= giongcho
self.maulong= maulong
# phương thức
def ngoi(self, mucdich):
return "{} đang ngồi để {}".format(self.giongcho,mucdich)
def chay(self):
return "{} đang chạy trên vỉa hè".format(self.giongcho)
# Lớp Chihuahua mở rộng từ lớp Dog
class Chihuahua(Dog):
def __init__(self, tencho, giongcho ,maulong, thucan):
# Gọi tới constructor của lớp cha (Dog) để gán giá trị vào thuộc tính của lớp cha
super().__init__(tencho, giongcho ,maulong)
self.thucan = thucan
# Kế thừa phương thức cũ
def chay(self):
print ("{} đang chạy trên vỉa hè".format(self.giongcho))
# Ghi đè phương thức cùng tên của lớp cha.
def ngoi(self, mucdich):
print ("{} đang ngồi để {}".format(self.giongcho, mucdich))
print ("{} thích ăn {}".format(self.giongcho, self.thucan))
# Bổ sung thêm thành phần mới
def sua(self):
print ("{} đang sủa".format(self.giongcho))
Chihuahua1 = Toyota("Chihuahua", "Chihuahua A", "Đỏ", "Thịt")
Chihuahua2 = Toyota("Chihuahua", "Chihuahua B", "Vàng", "Rau")
Chihuahua3 = Toyota("Chihuahua", "Chihuahua C", "Xanh", "Xương")
Chihuahua1.ngoi("liếm lông")
Chihuahua2.chay()
Chihuahua3.sua()
Kết quả:
Chihuahua A đang ngồi để liếm lông
Chihuahua A thích ăn Thịt
Chihuahua B đang chạy trên vỉa hè
Chihuahua C đang sủa
Tính Đóng gói (Encapsulation)
Tính đóng gói trong lập trình hướng đối tượng python áp dụng nhằm tránh những truy cập vào các hàm thuộc tính lõi của đối tượng.
Trong ngôn ngữ lập trình Python, bạn có thể biểu thị tính đóng gói bằng cách sử dụng dấu gạch dưới làm tiền tố như: "_" hoặc "__"
Ví dụ
class Dog:
def __init__(self):
# Áp dụng tính đóng gói ngăn chặn sửa đổi trực tiếp
self.__maxprice = 1000000
def sell(self):
print("Giá bán của chó: {}".format(self.__maxprice))
def setMaxPrice(self, price):
self.__maxprice = price
c = Dog()c.sell()
# thay đổi giá
c.__maxprice = 2000000
c.sell()
# thay đổi giá bằng hàm setter
c.setMaxPrice(2000000)
c.sell()
Kết quả là:
Giá bán của chó: 900
Giá bán của chó: 900
Giá bán của chó: 1000
Tính đa hình (Polymorphism)
Tính đa hình trong lập trình hướng đối tượng python chỉ đến các Class chứa những phương thức tương tự nhau nhưng được thực thi theo các cách khác nhau
Ví dụ
class Chihuahua:
def ngoi(self):
print("Chihuahua ngồi để liếm lông")
def sua(self):
print("Chihuahua đang sủa")
class Bulldog:
def ngoi(self):
print("Bulldog ngồi để quan sát")
def sua(self):
print("Bulldog đang sủa tên trộm")
# Tạo hàm chung
def kiemtra_ngoi(Dog): Dog.ngoi()
# Khởi tạo đối tượng
Chihuahua = Chihuahua()
Bulldog = Bulldog()
# Truyền đối tượng vào hàm
kiemtra_ngoi(Chihuahua)
kiemtra_ngoi(Bulldog)
Kết quả:
Chihuahua ngồi để liếm lông
Bulldog ngồi để quan sát
Các khóa học
- Data Engineer Track Specialized
- Combo Data Engineering Professional Hot
- Advanced AWS Cloud Data Engineer Specialized
- AWS Data Engineer for Beginners Specialized
- Combo Python Level 1 & Level 2 Bestseller
- Business Intelligence Track Hot
- Data Science Track Bestseller
- Data Analyst Professional (Data Analyst with Python Track) Bestseller
- RPA UiPath Nâng Cao: Chiến Thuật Automation Cho Chuyên Gia Specialized
- RPA UiPath cho Người Mới Bắt Đầu: Thành Thạo Automation Chỉ Trong 1 Ngày Specialized
- Business Analyst Fast Track Bestseller
- Combo Business Analyst Level 1 & Level 2 Bestseller
- Business Analyst for Beginners Bestseller
Đăng ký tư vấn khóa học
*Vui lòng nhập số điện thoại của bạn
*Vui lòng nhập họ tên của bạn
*Vui lòng chọn giới tính
*Vui lòng chọn 1 trường