Khai báo @property trong Python
@property python là gì? Bạn có muốn biết cách dùng property python không? Nếu có, hãy đọc bài viết dưới đây.
Tính năng trang trí hay decorator trong Python bao bọc một hàm, thêm một số chức năng vào mã hiện có và sau đó trả về. Các phương thức và hàm được biết là có thể gọi được. Do đó, một decorator cũng là một đối tượng có thể gọi và trả về đối tượng có thể gọi được. Điều này còn được gọi là siêu lập trình vì tại thời điểm hiện tại, một phần của chương trình sẽ thay đổi một phần khác của chương trình.
@property decorator là một decorator tích hợp sẵn trong Python, hữu ích trong việc định nghĩa các thuộc tính một cách dễ dàng mà không cần phải gọi thủ công hàm property() tích hợp. Hàm này được dùng để trả về các thuộc tính thuộc tính của một lớp từ các phương thức getter, setter và deleter đã chỉ định dưới dạng tham số.
Nhìn chung, đây là một hàm khá phổ biến và hữu ích cho lập trình viên Python. Bài viết sẽ cung cấp cho bạn cách dùng cơ bản của khai báo cơ bản @property trong Python.
@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 marksBâ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 marksLư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 marksYê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 name và marks 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 name và marks 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 name và marks.
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
36Bạn nên đọc
Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:
Cũ vẫn chất
-

46 câu ca dao hài hước, châm biếm hay nhất
Hôm qua -

Những phím tắt Excel đắt giá bạn nên biết
Hôm qua 6 -

Hướng dẫn thiết lập và quản lý FTP Server trên Windows 10
Hôm qua -

Code Hello Cafe VNG mới nhất và cách nhập code
Hôm qua -

Cách chèn emoji vào ảnh trên iPhone cực đơn giản
Hôm qua -

Biển số xe tại các quận huyện của Hà Nội và TPHCM
Hôm qua -

Cách đổi mật khẩu Wifi, đổi pass wifi VNPT, FPT, Tenda, TP-Link, Viettel trên máy tính, điện thoại
Hôm qua 27 -

Check IP website, kiểm tra IP của một domain bất kỳ
Hôm qua -

Cách thay đổi thời gian, ngày, tháng trong Windows 10?
Hôm qua -

Cap về uống rượu bia, stt về rượu bia vui và hài hước
Hôm qua
Học IT
Công nghệ
Microsoft Word 2013
Microsoft Word 2007
Microsoft Excel 2019
Microsoft Excel 2016
Microsoft PowerPoint 2019
Google Sheets
Lập trình Scratch
Bootstrap
Hướng dẫn
Ô tô, Xe máy