Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Khác biệt giữa attribute và property trong Python

Trong Python, mọi thứ đều là đối tượng. Mọi đối tượng đều có attributes (thuộc tính) và methods (phương thức).

Attribute (Thuộc tính)

    Là biến dữ liệu gắn liền với đối tượng: name, age, height...
  • Truy cập trực tiếp: obj.attr
  • Không có logic xử lý khi get/set.

Property (Thuộc tính tính toán)

Là attribute đặc biệt có getter, setter, deleter (phương thức __get__, __set__, __delete__). Khi truy cập obj.prop, Python kiểm tra xem prop có phải descriptor không (có các phương thức trên). Nếu có, gọi phương thức tương ứng thay vì trả về giá trị thô.

Decorator @property (Cách hiện đại)

class C:
    def __init__(self):
        self._x = None  # Attribute nội bộ (convention: _prefix)

    @property
    def x(self):
        """I'm the 'x' property."""
        return self._x       # Getter

    @x.setter
    def x(self, value):
        self._x = value      # Setter

    @x.deleter
    def x(self):
        del self._x          # Deleter

obj = C()
obj.x = 10      # Gọi setter
print(obj.x)    # Gọi getter -> 10
del obj.x       # Gọi deleter

Tóm tắt khác biệt

Đặc điểmAttributeProperty
Lưu trữGiá trị trực tiếpTính toán khi truy cập
Logic get/setKhông cóTùy chỉnh (validation, lazy load...)
Cú phápself.attr = val@property + decorator
Hiệu năngNhanhChậm hơn (gọi hàm)

Khi nào dùng property? Cần validation, computed value, lazy loading, hoặc thay đổi internal representation mà không phá vỡ API.