Header ads

Header ads
» » Khai báo @property trong Python

Trở lại với các bài học nâng cao của Python, hôm nay Quantrimang.com sẽ cùng bạn tìm hiểu về khai báo @property (decorator). Trong bài hướng dẫn trước, chúng ta đã thảo luận về Python Decorator, bạn nên đọc trước khi đi vào tìm hiểu về @property decorator nhé.

@property decorator trong Python

Như đã đề cập, ta có thể decorate một hàm bằng cách sử dụng decorator. Có một số decorator được tích hợp sẵn trong Python, trong đó có @property. Mục đích chính của các decorator là thay đổi các phương thức, thuộc tính class sao cho không cần thực hiện bất kỳ thay đổi nào trong code.

Theo dõi ví dụ sau:

class Student:       def __init__(self, name, marks):           self.name = name           self.marks = marks           self.gotmarks = self.name + ' obtained ' + self.marks + ' marks'         st = Student("Jaki", "25")      print(st.name)   print(st.marks)   print(st.gotmarks)

Chương trình xuất output như sau:

Jaki   25   Jaki obtained 25 marks

Bây giờ, ta muốn thay đổi thuộc tính name của class student thì chuyện gì sẽ xảy ra? Thêm 3 dòng sau vào code trước:

st.name = "Anusha"   print(st.name)   print(st.gotmarks)

Chương trình sẽ trả về như sau:

Jaki   25   Jaki obtained 25 marks   Anusha   Jaki obtained 25 marks

Lưu ý rằng thuộc tính name đã thay đổi nhưng câu được tạo bởi thuộc tính gotmarks vẫn giống như lúc đặt trong quá trình khởi tạo đối tượng student.

Bây giờ ta muốn gotmarks thay đổi khi tên sinh viên được cập nhật. Hãy sử dụng @property decorator

Chúng ta có thể giải quyết vấn đề này với đoạn code sau:

class Student:       def __init__(self, name, marks):           self.name = name           self.marks = marks          # self.gotmarks = self.name + ' obtained ' + self.marks + ' marks'          def gotmarks(self):           return self.name + ' obtained ' + self.marks + ' marks'         st = Student("Jaki", "25")   print(st.name)   print(st.marks)   print(st.gotmarks())      st.name = "Anusha"   print(st.name)   print(st.gotmarks())

Chương trình xuất output như sau:

Jaki   25   Jaki obtained 25 marks   Anusha   Anusha obtained 25 marks

Yêu cầu đã được giải quyết. Chúng tôi đã loại bỏ thuộc tính gotmarks khỏi hàm tạo và thêm một phương thức có tên gotmarks().

Tuy nhiên với thay đổi này, người dùng nào đang sử dụng class sẽ gặp rắc rối vì cần phải thay thế tất cả các thuộc tính gotmarks bằng hàm gotmarks(). Giả sử có 1000 dòng code thì việc sửa đổi sẽ cực kỳ phức tạp, mất công và dễ nhầm lẫn.

Giải quyết vấn đề trên bằng cách sử dụng @property decorator 

Ta sẽ giải quyết vấn đề này bằng cách sử dụng @property decorator python. Theo dõi code sau:

@property   def gotmarks(self):      return self.name + ' obtained ' + self.marks + ' marks'   

Chương trình sẽ cung cấp output giống như trước, nhớ xóa () phía sau gotmarks khi in kết quả. Bạn chỉ cần khai báo @property ở trên hàm gotmarks() để nó có sẵn sử dụng trong các lần sau.

Với decorator này, bạn đã có thể tiếp tục giữ nguyên nội dung code cũ mà vẫn mở rộng tính năng cho hàm.

Thiết lập @property setter

Trong Python, sử dụng @property (decorators) để khai báo setter.

Bây giờ, giả sử chúng ta muốn update thuộc tính namemarks khi thay đổi giá trị của gotmarks, theo dõi đoạn code sau:

class Student:       def __init__(self, name, marks):           self.name = name           self.marks = marks          # self.gotmarks = self.name + ' obtained ' + self.marks + ' marks'          @property       def gotmarks(self):           return self.name + ' obtained ' + self.marks + ' marks'          @gotmarks.setter       def gotmarks(self, sentence):           name, rand, marks = sentence.split(' ')           self.name = name           self.marks = marks         st = Student("Jaki", "25")   print(st.name)   print(st.marks)   print(st.gotmarks)   print("##################")   st.name = "Anusha"   print(st.name)   print(st.gotmarks)   print("##################")   st.gotmarks = 'Golam obtained 36'   print(st.gotmarks)   print(st.name)   print(st.marks)   

Để update giá trị của namemarks khi thay đổi giá trị của gotmarks, bạn sử dụng setter trong @proprety decorator.

Lưu ý, viết @gotmarks.setter nghĩa là ta đang áp dụng setter trên phương thức gotmarks, sau đó ta sẽ tách câu và cập nhật giá trị của namemarks.

Sử dụng @proprety decorator cùng với setter phía trên sẽ tạo ra output như sau:

Jaki   25   Jaki obtained 25 marks   ##################   Anusha   Anusha obtained 25 marks   ##################   Golam obtained 36 marks   Golam   36

Bài trước: Decorator trong Python

Bài tiếp: Regular Expression (RegEx) trong Python


Khóa đào tạo Power BI phân tích báo cáo để bán hàng thành công

Khóa học Lập trình Visual Foxpro 9 - Dành cho nhà quản lý và kế toán

Khóa học hướng dẫn về Moodle chuyên nghiệp và hay
Xây dựng hệ thống đào tạo trực tuyến chuyên nghiệp tốt nhất hiện nay.


Khóa học AutoIt dành cho dân IT và Marketing chuyên nghiệp

Khóa học hướng dẫn sử dụng Powerpoint từ đơn giản đến phức tạp HIỆU QUẢ
Khóa học Thiết kế, quản lý dữ liệu dự án chuyên nghiệp cho doanh nghiệp bằng Bizagi
 Khoa hoc hay
Khóa học Phân tích dữ liệu sử dụng Power Query trong Excel
Khóa học Phân tích dữ liệu sử dụng TableAU - Chìa khóa thành công!
Nhấn vào đây để bắt đầu khóa học

Khóa học "Thiết kế bài giảng điện tử", Video, hoạt hình 
kiếm tiền Youtube bằng phần mềm Camtasia Studio
Khóa học HƯỚNG DẪN THIẾT KẾ VIDEO CLIP CHO DÂN MARKETING CHUYÊN NGHIỆP
 Xây dựng website​​​​
HƯỚNG DẪN THIẾT KẾ QUẢNG CÁO VÀ ĐỒ HỌA CHUYÊN NGHIỆP VỚI CANVA
Hãy tham gia khóa học để trở thành người chuyên nghiệp. Tuyệt HAY!😲👍
 Khoa hoc hay
MICROSOFT ACCESS



GOOGLE SPREADSHEETS phê không tưởng
 Khoa hoc hay
Khóa hoc lập trình bằng Python tại đây

Hacker mũ trắng




Hãy tham gia khóa học để biết mọi thứ

Để tham gia tất cả các bài học, Bạn nhấn vào đây 
Khóa học sử dụng Adobe Presenter-Tạo bài giảng điện tử
 Khoa hoc hay

Khóa học sử dụng Edmodo để dạy và học hiện đại để thành công


Cập nhật công nghệ từ Youtube tại link: http://congnghe.hocviendaotao.com
Tham gia nhóm Facebook
Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com

About Học viện đào tạo trực tuyến

Xinh chào bạn. Tôi là Đinh Anh Tuấn - Thạc sĩ CNTT. Email: dinhanhtuan68@gmail.com .
- Nhận đào tạo trực tuyến lập trình dành cho nhà quản lý, kế toán bằng Foxpro, Access 2010, Excel, Macro Excel, Macro Word, chứng chỉ MOS cao cấp, IC3, tiếng anh, phần mềm, phần cứng .
- Nhận thiết kế phần mềm quản lý, Web, Web ứng dụng, quản lý, bán hàng,... Nhận Thiết kế bài giảng điện tử, số hóa tài liệu...
HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN:TẬN TÂM-CHẤT LƯỢNG.
«
Next
Bài đăng Mới hơn
»
Previous
Bài đăng Cũ hơn