Z
ZHANK
编程在线教程Python 教程属性描述符与 property
面向对象

属性描述符与 property

@property 装饰器、setter/deleter、__slots__ 内存优化

属性描述符与 property

@property 把方法伪装成属性——访问时自动调用 getter,赋值时经过 setter 验证。

学完本章你将: 掌握 @property/setter/deleter、slots 内存优化。


@property 基本用法

python
class Temperature:
    def __init__(self, celsius):
        self._celsius = celsius

    @property
    def celsius(self):
        """摄氏度"""
        return self._celsius

    @celsius.setter
    def celsius(self, value):
        if value < -273.15:
            raise ValueError("低于绝对零度")
        self._celsius = value

    @property
    def fahrenheit(self):
        """华氏度(只读计算属性)"""
        return self._celsius * 9 / 5 + 32

t = Temperature(25)
print(t.celsius)     # 25(像属性一样访问)
print(t.fahrenheit)  # 77.0
t.celsius = 30       # 经过 setter 验证
# t.fahrenheit = 100 # ❌ 只读属性,没有 setter

__slots__ —— 内存优化

python
class Point:
    __slots__ = ("x", "y")  # 禁止动态添加属性,节省内存

    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(1, 2)
# p.z = 3  # ❌ AttributeError——没有 __dict__

💡 大量创建小对象时(如游戏中的点、数据处理),__slots__ 可减少 50%+ 内存开销。