@property 的基本概念
在 Python 面向对象编程中,@property 是实现属性封装的核心装饰器 ,它的核心作用是:将类的「方法」伪装成「属性」,既实现了对私有属性的安全访问 / 修改,又保留了简洁的属性调用语法,完美解决了传统 get_xxx()/set_xxx() 方法的繁琐问题。
【总结:把要操作私有属性的常用方法包装成属性本身,从而使用直接访问属性的语法】
使用 @property 封装属性
定义一个类,使用 @property 装饰器将方法转换为属性。这样可以在不改变类的外部接口的情况下,对属性的访问和修改进行控制。
1. 核心规则
@property:装饰get 方法 ,将方法变成只读属性@属性名.setter:装饰set 方法 ,定义属性的修改规则(必须写在 @property 之后)@属性名.deleter:装饰del 方法 ,定义属性的删除规则(可选)@property装饰的方法名 = 对外暴露的属性名
2. 示例
python
class Person:
def __init__(self, name):
self._name = name # 使用下划线表示受保护的属性
@property #装饰get 方法,将方法变成只读属性
def name(self):
return self._name
@name.setter #装饰set 方法,定义属性的修改规则
def name(self, value):
if not isinstance(value, str):
raise ValueError("Name must be a string")
self._name = value
@name.deleter #装饰del 方法,定义属性的删除规则
def name(self):
print("Deleting name...")
del self._name
使用 @property 的好处
- 封装性:隐藏内部实现细节,提供统一的接口。
- 灵活性:可以在获取或设置属性时添加额外的逻辑。
- 兼容性:可以在不改变外部代码的情况下修改内部实现。
- 语法简洁 :调用时像普通属性一样(
obj.xxx),无需写方法括号