Python 类中 property 属性的两种实现方式与用法详解

叶初
叶初
发布时间:2026-10-11| 3人浏览过
原创

在 Python 面向对象编程中,property 属性用于简化对类内部属性的访问控制。它允许开发者像访问普通属性一样调用方法,同时支持获取、设置和删除逻辑。本文介绍两种实现方式:@property 装饰器和 property() 函数,并通过代码示例说明其具体用法与区别。

property 属性的两种创建方式

Python 中实现 property 属性主要有两种方式:使用 @property 装饰器和使用 property() 函数。两者均可简化属性的获取与设置操作,但在语法结构和兼容性上存在差异。

方式一:使用 @property 装饰器

@property 是 Python 中更常用的方式,它通过装饰器语法将方法转换为属性。该方式适用于新式类和旧式类,但 @xxx.setter 和 @xxx.deleter 仅在新式类中有效。

class Goods:
  @property
  # 只能传递self参数。 必须返回一个值
  def size(self):
    return 100 # 必须返回一个值
obj = Goods()
result = obj.size # 调用属性(没有用小括号,用属性的方式调用函数)
print(result)
# property属性一般对属性值做一些预处理或格式化处理等,可以简化属性的获取。

在更完整的示例中,@property 可与 @xxx.setter 和 @xxx.deleter 配合使用,实现属性的获取、设置和删除逻辑:

class Goods(object):
  def __init__(self):
    # 原价
    self.original_price = 100
    # 折扣
    self.discount = 0.8
  @property
  # 方式一 获取属性值 (新式类和旧式类都支持该方式)
  def price(self):
    # 实际价格 = 原价 * 折扣
    new_price = self.original_price * self.discount
    return new_price
  @price.setter
  # 方式二 设置属性值 (旧式类不支持,需要传两个参数)
  def price(self, value):
    self.original_price = value
  @price.deleter
  # 方式三 删除属性 (旧式类不支持)
  def price(self):
    del self.original_price
obj = Goods()
obj.price     # 获取商品价格 (自动调用@property修饰的函数)
obj.price = 200  # 修改商品原价 (自动调用@price.setter修饰的函数,并将200传给函数)
del obj.price   # 删除商品原价 (自动调用@price.deleter修饰的函数)

方式二:使用 property() 函数

property() 函数通过类属性的方式实现,适用于新式类和旧式类。它接受四个参数:获取方法、设置方法、删除方法和属性描述信息。

class Goods(object):
  def __init__(self):
    # 原价
    self.original_price = 100
    # 折扣
    self.discount = 0.8
  def get_price(self):
    # 实际价格 = 原价 * 折扣
    new_price = self.original_price * self.discount
    return new_price
  def set_price(self, value):
    self.original_price = value
  def del_price(self):
    del self.original_price
  # 类属性。 property(方法名1,方法名2,方法名3,"属性描述信息")
  PRICE = property(get_price, set_price, del_price, "属性描述信息...")
obj = Goods()
obj.PRICE     # 获取商品价格 自动调用propert()函数第一个参数指定的方法。
obj.PRICE = 200  # 设置商品原价 自动调用propert()函数第二个参数指定的方法。
desc = Goods.PRICE.__doc__ # 自动获取第四个参数中设置的值:属性描述信息...
print(desc)
del obj.PRICE   # 删除商品原价 自动调用propert()函数第三个参数指定的方法。

两种方式的对比与选择

@property 装饰器语法更简洁,适用于现代 Python 开发,但 @xxx.setter 和 @xxx.deleter 仅支持新式类。而 property() 函数兼容性更好,适用于旧式类和新式类,但语法相对繁琐。开发者可根据项目需求和 Python 版本选择合适的实现方式。

以上就是 Python 类中 property 属性的两种实现方式与用法示例的详细内容,更多关于 Python 属性管理的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。