CLASS VÀ OBJECT TRONG PYTHON
Python là một ngôn ngữ hướng đối tượng. Vì vậy hầu hết mọi thứ trong Python đều là những đối tượng với những thuộc tính (properties) và phương thức (methods) riêng.
OOP có 3 tính chất cơ bản các bạn cần phải nắm đó là:
- Tính đóng gói.
- Tính kế thừa.
- Tính đa hình.
Đối tượng (Object) chỉ đơn giản là một tập hợp các dữ liệu (các biến) và các phương thức (các hàm) hoạt động trên các dữ liệu đó. Và, lớp (class) là một kế hoạch chi tiết cho đối tượng.
Lập trình hướng đối tượng (object-oriented programming) là phương pháp lập trình phân chia theo từng đối tượng, nó khác hoàn toàn với lập trình hướng module, thay vì mỗi module sẽ sử dụng hàm thì OOP sẽ được quản lý trong một lớp đối tượng.
Python là một ngôn ngữ lập trình hướng đối tượng rất mạnh mẽ, những công việc phức tạp có thể dùng Python để giải quyết một cách dễ dàng.
Mỗi đối tượng sẽ có hai nhóm thông tin chính, thứ nhất là các thuộc tính, thứ hai là những hành động. Ví dụ đối tượng Con Chó thì nó có các thông tin như chủng loại, màu sắc, cân nặng, … và các hành động như ăn uống, đi vệ sinh, chạy nhảy …
Tạo một class
Để tạo một class các bạn sử dụng từ khóa “class” theo cấu trúc như sau:
class ClassName:
[listOfProperties here]
[listOfMethods here]
Để tạo một class, chúng ta sử dụng từ khóa class
Tên class được đặt theo quy tắc đặt định danh trong python.
Việc khởi tạo class được kết thúc bằng dấu :
phía sau tên class.
Các phương thức và thuộc tính của class tạo nên phần thân.Phần thân của class được viết lùi vào một khoảng bằng nhau.
Ví dụ: Khai báo class cho đối tượng con chó, đặt tên là Dog, nó có thuộc tính màu lông và hành động chạy.
Bạn hãy chạy thử chương trình để xem kết quả.
Giống như khai báo các hàm bắt đầu bằng một từ khóa là def thì khai báo lớp trong Python sử dụng từ khóa class.
Dòng kí tự đầu tiên được gọi là docstring – một mô tả ngắn gọn về lớp. Docstring này không bắt buộc nhưng khuyến khích sử dụng.
Tạo một objects trong python
Khi đã có một class, chúng ta có thể sử dụng class đó để tạo một objects trong python.
Hãy tự mình chạy để xem kết quả.
Hàm __init__()
Ở trên là một ví dụ về một class đơn giản, bạn có thể thấy nó giống như một hàm. Những class như vậy thường không có ích nhiều trong thực tế.
Để hiểu ý nghĩa một lớp, phải hiểu được bản chất của hàm init().
Tất cả các class đều có một hàm được tạo mặc định là hàm init(). Hàm init() được dùng để gán giá trị thuộc tính cho đối tượng hoặc các hoạt động khác khi đối tượng được tạo.
Như một hàm thông thường hàm init
cũng được tạo bằng từ khóa def
, nếu như trong ngôn ngữ lập trình hướng đối tượng khác thì đây được gọi là hàm tạo. Chúng ta có thể truyền bất kỳ số lượng đối số nào trong khi tạo đối tượng lớp theo định nghĩa của hàm init.
Vd: Khai báo class cho đối tượng con chó, đặt tên là Dog, nó có thuộc tính màu lông và hành động chạy.
Trong ví dụ trên, hàm __init__ hoạt động như một hàm tạo và được gọi tự động ngay khi câu lệnh dog_01 = dog(“Husky”, “running”) được thực thi.
Vì nó là một hàm bên trong một lớp, nên đối số mặc định đầu tiên được truyền vào nó là self
tuy nhiên chúng ta có thể thay đối tên tham số này theo ý thích, không nhất thiết phải là self nhưng nhất thiết phải có tham số này vì chương trình Python quy định như vậy. Tham số thứ hai, là getname được sử dụng để bắt đối số thứ hai được truyền vào là “Husky”. Tham số thứ ba, là getstatus được dùng để bắt đối số thứ ba được truyền vào là “running”.
Các phương thức
Đối tượng cũng có thể chứa các phương thức. Các phương thức là các hàm dùng để mô tả các đối tượng.
Trong ví dụ trên, thay vì sử dụng hàm print ở ngoài.Chúng ta có thể tạo một hàm display
có tác dụng tương tự như hàm in.
Kế thừa trong python
Kế thừa là một tính năng được sử dụng trong lập trình hướng đối tượng; nó đề cập đến việc định nghĩa một lớp mới với ít hoặc không sửa đổi một lớp hiện có. Lớp mới được gọi là lớp dẫn xuất và lớp mà nó kế thừa được gọi là lớp cơ sở . Python hỗ trợ kế thừa; nó cũng hỗ trợ nhiều kế thừa . Một lớp có thể kế thừa các thuộc tính và phương thức hành vi từ một lớp khác.
Trong ví dụ trên, mặc dù name và status được tạo ở bên trong class dog. Nhưng vẫn có thể truy cập được từ trong class concun
Thêm một ví dụ nữa, các hàm cũng có thể truy cập từ lớp con khi được kế thừa từ lớp cơ sở:
Các loại kế thừa
- Kế thừa đơn: Kiểu thừa kế khi một lớp chỉ kế thừa một lớp cơ sở được gọi là thừa kế đơn, như chúng ta đã thấy trong ví dụ trên.
- Đa kế thừa: Khi một lớp kế thừa nhiều lớp cơ sở, nó được gọi là đa kế thừa. Không giống như các ngôn ngữ như Java , Python hoàn toàn hỗ trợ đa kế thừa. Tất cả các lớp cơ sở được đề cập bên trong ngoặc như một danh sách được phân tách bằng dấu phẩy.
Một ví dụ khác để hiểu rõ hơn về tính kế thừa của class trong Python:
- Kế thừa đa cấp:
Khi một lớp kế thừa một lớp cơ sở và sau đó một lớp khác kế thừa lớp dẫn xuất trước đó, tạo thành cấu trúc lớp ‘cha mẹ, con và cháu’, thì nó được gọi là thừa kế đa cấp.
Chạy chương trình để thấy sự khác nhau giữa hai ví dụ trên.
- Kế thừa phân cấp: Khi một lớp cơ sở được kế thừa bởi nhiều lớp dẫn xuất, nó được gọi là thừa kế phân cấp.
- Di truyền lai: Di truyền lai là khi có sự kết hợp của các kiểu thừa kế đã đề cập ở trên, nghĩa là sự pha trộn của nhiều loại thừa kế.
Thuộc tính riêng của một lớp trong Python
Trong khi thực hiện kế thừa, có một số trường hợp nhất định trong đó chúng ta không muốn tất cả các thuộc tính của một lớp được kế thừa bởi lớp dẫn xuất. Trong các trường hợp đó, chúng ta có thể đặt các thuộc tính đó là thành viên riêng của lớp cơ sở. Chúng ta làm điều này bằng cách thêm hai dấu gạch dưới (__) trước tên biến.
Khi bạn chạy chương trình trên sẽ báo lỗi ngay.
Bài học đến đây là kết thúc, chúc các bạn một ngày học tập vui vẻ!
Hmm is anyone else encountering problems with the images on this
blog loading? I’m trying to find out if its a problem on my end or
if it’s the blog. Any feed-back would be greatly appreciated.