Các phương thức lớp trong lập trình hướng đối tượng với Python

Lập trình Hướng Đối Tượng với Python

5.0 (7 đánh giá)
Tạo bởi I Hate Python Team Cập nhật lần cuối 5 năm trước 29.528 lượt xem 2 bình luận
Tác giả/Dịch giả: I Hate Python Team
Học nhanh

Danh sách bài học

Các phương thức lớp trong lập trình hướng đối tượng với Python

Dẫn nhập 

Ở các bài trước, ta đã biết được cách TẠO & SỬ DỤNG PHƯƠNG THỨC CỦA LỚP. Đặc điểm chung của các phương thức đó là luôn sẽ có tối thiểu một argument được gửi vào đó chính là đối đượng gọi phương thức.

Thông thường parameter được nhận nhiệm vụ nhân argument đó ta sẽ đặt là self. Những phương thức mà có mặc định parameter self người ta gọi đó là những regular method (phương thức thường).

Còn ở bài hôm nay, các bạn biết thêm về hai loại phương thức nữa đó chính là class method và static method.


Nội dung

Để theo dõi bài này một cách tốt nhất, bạn nên có có những kiến thức cơ bản về Python trong khóa LẬP TRÌNH PYTHON CƠ BẢN

Nếu bạn chưa có thời gian để học hết khóa trên thì hãy đảm bảo đã tìm hiểu những kiến thức sau đây

Và đương nhiên để học tiếp bài sau, bạn phải nắm vững kiến thức ở các bài trước: 

Bạn và Kteam sẽ cùng tìm hiểu những nội dụng sau đây

  • Class method
  • Static method

Class method

Nếu regular method argument đầu tiên tự động đưa vào là đối tượng đó và được nhận bởi parameter self thì ở class methodargument đầu tiên tự động đưa vào chính lớp gọi phương thức đó hoặc là lớp của đối tượng gọi phương thức đó.

Theo quy ước thì parameter nhận argument này sẽ là cls.

Bạn còn nhớ ví dụ này ở bài trước chứ?

Như bạn biết thì khi làm như vậy, thuộc tính ở lớp cũng như tất cả các đối tượng thuộc lớp đó sẽ được cập nhật lại với giá trị mới.

Tuy nhiên, cách này thường không đường sử dụng, mà thay vào đó họ sẽ sử dụng class method. Sử dụng làm sao thì mời bạn đọc đến với ví dụ sau:

Kết quả:

Để Python biết được phương thức nào là class method thì bạn thên @classmethod ngay trên dòng khai báo hàm. Và như đã nói, mặc định sẽ luôn có một argument được gửi vào đó chính là lớp gọi phương thức đó.

Và dĩ nhiên cũng có thể là lớp của đối tượng gọi phương thức đó

 Kết quả:

 Tuy nhiên, đây không phải là ứng dụng chính của class method. Class method thường được dùng để tạo đối tượng.

Đặt vấn đề, ta muốn khởi tạo một siêu nhân, tuy nhiên một số siêu nhân lại có các thông tin không được tường minh rõ ràng mà lại được lưu dưới dạng một list, hay một chuỗi ta có thể xử lí để lấy các thông tin. Và như vậy, bạn thấy rằng ta cần phải có một bước tiền xử lí trước khi ra được các thông tin của một siêu nhân sau đó mới tạo được đối tượng

Giả sử ta phải xử lí các thông tin của siêu nhân là một chuỗi. Các thông tin được nối với nhau bằng một kí tư “-“.

Ở đây ta cần phải có một chút kiến thức về XỬ LÝ CHUỖI. Đầu tiên ta cần tách bằng kí tự “-“, nghĩa ngay tới phương thức split của chuỗi

 Ta được các chuỗi đã tách xong, tuy nhiên một số chuỗi bị dư khoảng trắng, ta dùng phương thức strip kết hợp list comprehension

 Và việc cuối cùng là gán các thông tin sau khi xử lí trong cho các biến

 Giờ ta chỉ cần áp dụng class method xử lí của chúng ta trong lớp nào

 Kết quả:

 Như bạn thấy, đối tượng sieu_nhan_A giờ đây không còn được khởi tạo theo cách thông thường mà giờ đây lớp SieuNhan qua một bức xử lí các thông tin, sau đó khởi tạo một đói tượng ngay trong phương thức, rồi mới trả về lại cho sieu_nhan_A.


Static method

Regular method được ngầm gửi vào argument là chính đối tượng gọi phương thức và ta sử dụng parameter self để xử lí những vấn đề khác, class method được ngầm gửi vào argument là chính class gọi phương thức và ta sử dụng parameter cls để xử lí những vấn đề khác thì static method chẳng ngầm gửi cái gì vào cả, nó như một hàm bình thường.

Câu hỏi ở đây là, ta chẳng cần tạo static method mà tạo luôn hàm ở ngoài lớp được không? Chẳng vấn đề gì. Tuy nhiên static method vẫn tồn tại vì đôi lúc ta cần sự khoa học, logic, một số phương thức chẳng có sử dụng tí gì tới những thông tin của đối tượng thuộc lớp đó tuy nhiên nó vẫn có gì đó liên quan nên vẫn được đặt ở trong lớp đó.

Bạn đọc xem ví dụ sau đây:

Kết quả:

 Nếu bạn vẫn phân vân khi nào dùng regular method, class method, static method thì bạn chỉ cần nhớ thế này:

  • Nếu bạn dựng một phương thức cần sử dụng đối tượng đó thì dùng regular method
  • Nếu bạn cần dùng class thì dùng class method
  • Trường hợp còn lại (tức là không dùng gì) thì dùng static method

Lưu ý: Mình thấy một số bạn luôn luôn dùng regular method cho lớp, lúc nào cũng có một parameter self cho dù trong phương thức đó chẳng bao giờ sử dụng tới. Điều này không sai, tuy nhiên khi đọc code sẽ thấy sự thiếu chuyên nghiệp.


Kết luận

Bài này đã giúp bạn nắm được rõ hơn về các loại phương thức trong lớp

Ở bài tiếp theo, ta sẽ tìm hiểu về TÍNH KẾ THỪA TRONG LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG PYTHON.

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Các phương thức lớp trong lập trình hướng đối tượng với Python dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Tác giả/Dịch giả

Chúng tôi là những người có niềm yêu thích Python và muốn Python được nhiều người biết đến hơn ở Việt Nam.

Khóa học

Lập trình Hướng Đối Tượng với Python

Nhắc đến lập trình hướng đối tượng, mọi người nghĩ ngay tới những Java, C++, C#,… Và bên cạnh đó, tuy không nhiều, nhưng vẫn được nhắn đến đó chính là chú trăn thanh lịch Python.

Ở khóa học này, Kteam sẽ giới thiệu với các bạn những kiến thức cơ bản về Lập trình hướng đối tượng trong Python một cách dễ hiểu, từ đó bạn có thể ứng dụng kiến thức hướng đối tượng khi tiếp xúc với các framework, package của Python.

Không những thế, bạn cũng sẽ dễ dàng tiếp cận sâu hơn về lập trình hướng đối tượng khác khi bạn chuyển đổi sang lập trình bằng ngôn ngữ khác, vì như đã nói, hướng đối tượng có ở hầu hết mọi ngôn ngữ hiện nay và được ứng dụng rất rộng rãi

Đánh giá

5.0
7 đánh giá
Đánh giá
5
7
4
3
2
1
Vo Tan Duc đã đánh giá 2 năm trước

Letrongdat1506 đã đánh giá 3 năm trước

son5aanluu đã đánh giá 4 năm trước

minhtran0563 đã đánh giá 4 năm trước

hay lắm ủng hộ 5* :D

Nong Dam Hieu đã đánh giá 5 năm trước

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
huynhttung đã bình luận 4 năm trước

class SieuNhan:

suc_manh = 50

def __init__(self, para_ten, para_vu_khi, para_mau_sac):

self.ten = para_ten

self.vu_khi = para_vu_khi

self.mau_sac = para_mau_sac

@classmethod def from_string(cls, s):

lst = s.split('-')

new_lst = [st.strip() for st in lst]

ten, vu_khi, mau_sac = new_lst

return cls(ten, vu_khi, mau_sac)

infor_str = "Sieu nhan do - Kiem - Do"

sieu_nhan_A = SieuNhan.from_string(infor_str) print(sieu_nhan_A.__dict__)

kết quả in;

{'ten': 'Sieu nhan do', 'vu_khi': 'Kiem', 'mau_sac': 'Do'}

Em không hiểu cách khởi tạo 1 dict từ 2 danh sách key và value mà không cần zip. phần Dict 1, 2 em coi giáo trình không thấy ạ, ai biết xin chỉ giáo.

dung0432 đã bình luận 4 năm trước

Cho em hỏi là khi dùng classmenhod muốn thay đổi 1 thuộc tính trong 3 thuộc tính mà không cần phải thay đổi 2 thuộc tính còn lại phải là thế nào ạ

Không có video.