Python 内建函数列表 > Python 的内置函数 property

Python 的内置函数 property() 是一个非常重要的工具,用于管理类属性的访问。它提供了一种优雅的方式来定义属性访问器(getter)、设置器(setter)和删除器(deleter)方法,同时保持简洁的接口。

基本用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Person:
def __init__(self, name):
self._name = name

@property
def name(self):
"""获取姓名"""
return self._name

@name.setter
def name(self, value):
if not isinstance(value, str):
raise ValueError("姓名必须是字符串")
self._name = value

@name.deleter
def name(self):
print("删除姓名")
del self._name

典型应用场景

  1. 数据验证:在设置属性值时进行有效性检查
  2. 计算属性:根据其他属性动态计算值
  3. 访问控制:控制对敏感属性的访问权限
  4. 延迟加载:只在需要时才计算或获取属性值

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Person:
def __init__(self, name):
self._name = name

@property
def name(self):
"""获取姓名"""
return self._name

@name.setter
def name(self, value):
if not isinstance(value, str):
raise ValueError("姓名必须是字符串")
self._name = value

@name.deleter
def name(self):
print("删除姓名")
del self._name

使用装饰器的优势

使用 @property 装饰器比直接使用 property() 函数更为简洁直观。实际上,装饰器语法:

1
2
3
4
@property
def name(self):
...

等同于:

1
2
name = property(name)

注意事项

  1. 属性方法应该保持简单,避免复杂的计算或IO操作
  2. 不要过度使用 property,对于简单的属性访问直接使用公共属性即可
  3. property 不能用于实例方法,只能用于实例属性

进阶用法

property 还可以用于实现:

  • 只读属性(只定义 getter)
  • 只写属性(只定义 setter)
  • 缓存属性(在 getter 中进行缓存)
  • 观察者模式(在 setter 中通知观察者)

通过合理使用 property,可以大大提高代码的可维护性和安全性。


Python 的内置函数 property》 是转载文章,点击查看原文