Menu
CoddyTech

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 14 trên 64.

Decorator thuộc tính giúp bạn kiểm soát cách truy cập và chỉnh sửa thuộc tính, đồng thời vẫn giữ cú pháp thuộc tính đơn giản.

Đây là ví dụ về một lớp có getter thuộc tính:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age

Dùng thuộc tính như một thuộc tính thông thường:

person = Person("Alice", 30)
print(person.age)

Đầu ra:

30

Lưu ý, bạn truy cập age mà không dùng dấu ngoặc đơn, dù thực ra thao tác này gọi một phương thức (method).

Thêm setter để xác thực dữ liệu khi đặt giá trị:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age
    
    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

Giờ bạn có thể đặt tuổi và tự động kiểm tra tính hợp lệ:

person = Person("Alice", 30)
person.age = 31     # Dùng setter để kiểm tra tính hợp lệ
print(person.age)   # Dùng getter

# Dòng này sẽ gây ra lỗi:
# person.age = -5   # ValueError: Tuổi không thể là số âm

Đầu ra:

31

Tạo các thuộc tính tính toán để tính giá trị:

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    @property
    def area(self):
        return self.width * self.height

rect = Rectangle(5, 3)
print(rect.area)  # Tính 5 * 3 = 15

Đầu ra:

15

Điểm chính: Decorator thuộc tính giúp phương thức trông giống thuộc tính. Dùng @property cho getter và @attribute_name.setter cho setter. Cách này cho phép xác thực dữ liệu và tính toán giá trị, đồng thời giữ cú pháp truy cập thuộc tính đơn giản.

challenge icon

Thử thách

Trung bình

Hoàn thành lớp Temperature trong temperature.py để chuyển đổi giữa độ C và độ F. Sau đó dùng lớp này trong driver.py để kiểm tra các phép chuyển đổi nhiệt độ. Làm theo các chú thích TODO trong cả hai tệp để thực hiện từng bước.

In mỗi phép chuyển đổi theo định dạng [celsius]°C is [fahrenheit]°F, giữ nguyên giá trị độ C như đã nhập và dùng giá trị độ F do Python tính. Không làm tròn hoặc định dạng các số. Hai dòng mà driver tạo ra là:

25°C is 77.0°F
37.0°C is 98.6°F

Tự làm thử

# TODO: Nhập lớp (class) Temperature từ module temperature

# Kiểm tra lớp:
# TODO: Tạo một instance nhiệt độ ở 25°C
temp = None  # Thay bằng instance Temperature thực tế

# TODO: In ra cả hai giá trị Celsius và Fahrenheit
# TODO: Dùng định dạng: "25°C is 77.0°F" (in nguyên hai giá trị, không làm tròn hoặc định dạng thêm)

# TODO: Đặt nhiệt độ thành 98.6°F

# TODO: In lại cả hai giá trị để xác nhận việc chuyển đổi hoạt động đúng
# TODO: Dùng cùng định dạng như trước
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch Python online