Decorator thuộc tính
Thuộc phần Lập trình hướng đối tượng trong hành trình Python của Coddy. Bài học 10 trên 64.
Bộ trang trí @property cho phép bạn truy cập các phương thức như thuộc tính, giúp lấy và đặt giá trị một cách gọn gàng. Cách này hữu ích cho việc đóng gói, cho phép bạn thêm logic xác thực hoặc các giá trị được tính toán mà không cần thay đổi giao diện công khai của lớp.
Đây là ví dụ về một lớp sử dụng @property:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@property
def area(self):
return 3.14159 * self._radius ** 2Lưu ý rằng chúng ta dùng self._radius để lưu giá trị thực tế. Nếu dùng self.radius bên trong phương thức getter, phương thức này sẽ gọi lại chính nó, dẫn đến đệ quy vô hạn.
Tạo một hình tròn và truy cập các thuộc tính:
my_circle = Circle(5)Truy cập thuộc tính như các thuộc tính thông thường:
print(my_circle.radius)
print(my_circle.area)Đầu ra:
5
78.53975Lưu ý rằng bạn không dùng dấu ngoặc đơn () khi truy cập thuộc tính. Chúng trông giống thuộc tính nhưng lại chạy code của phương thức.
Thêm một hàm setter để cho phép thay đổi giá trị và kiểm tra tính hợp lệ:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@radius.setter
def radius(self, value):
if value > 0:
self._radius = value
else:
print("Radius must be positive!")Giờ bạn có thể đặt bán kính như một thuộc tính:
my_circle = Circle(5)
my_circle.radius = 10 # Sử dụng phương thức setter
print(my_circle.radius) # Sử dụng phương thức getterĐầu ra:
10Điểm chính: @property khiến phương thức trông như thuộc tính, còn @property_name.setter cho phép bạn kiểm soát cách gán giá trị, nhờ đó xác thực dữ liệu và đóng gói dữ liệu.
Tự làm thử
Bài học này không có thử thách code.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTham số selfPhương thứcThuộc tínhPhương thức khởi tạo (__init__)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnHàm super()Ghi đè phương thứcKế thừa đa lớpThứ tự phân giải phương thứcÔn tập: hệ thống phân cấp nhân viên2Decorator
Giới thiệu về decoratorDecorator thuộc tínhDecorator phương thức tĩnhDecorator phương thức lớp5Tính đa hình
Xem lại cách ghi đè phương thứcKiểu gõ vịtLớp và phương thức trừu tượngThiết kế giao diệnÔn tập: máy tính hình học8Các khái niệm OOP nâng cao
Kết hợp và kế thừaMixinPhương thức tĩnh và phương thức lớpDecorator lớpTrình quản lý ngữ cảnhTự luyện tập: Trình biên dịch Python online