Python中@property装饰器与property函数的完整用法解析

Ada
Ada
发布时间:2026-10-13| 5人浏览过
原创

本文详细解析Python中@property装饰器及property函数的常见用法。通过基本属性访问、setter/deleter定义、实际价格计算示例以及私有属性封装等场景,展示如何实现类属性的智能读写控制。内容涵盖代码实现与运行结果,帮助开发者深入理解Python属性机制。

Python属性访问机制概述

本文通过具体实例,详细介绍Python中@property装饰器以及property函数的典型应用场景。以下内容旨在为读者提供参考与学习素材。

@property装饰器的基本使用

首先介绍@property的基本用法,其主要功能是将类中的方法转换为属性进行访问。


class Person(object):
  @property
  def get_name(self):
    print('我叫xxx')
def main():
  person = Person()
  person.get_name
if __name__ == '__main__':
  main()

代码执行后的输出结果如下:

我叫xxx

定义属性的setter与deleter

接下来演示@property装饰器中setter和deleter方法的定义与使用。


class Goods(object):
  @property
  def price(self):
    print('@property')
  @price.setter
  def price(self,value):
    print('@price.setter:'+str(value))
  @price.deleter
  def price(self):
    print('@price.deleter')
obj = Goods()
obj.price = 50
obj.price
del obj.price

相关代码的运行结果如下:

@price.setter:50 @property @price.deleter

@property综合应用示例

进一步通过一个完整的@property示例进行说明。


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
obj.price = 200
del obj.price

使用property函数实现属性控制

随后介绍如何使用property函数来实现相同的功能。


class Foo(object):
  def get_name(self):
    print('get_name')
    return 'laowang'
  def set_name(self, value):
    '''必须两个参数'''
    print('set_name')
    return 'set value' + value
  def del_name(self):
    print('del_name')
    return 'laowang'
  NAME = property(get_name, set_name, del_name, 'description.')
obj = Foo()
obj.NAME  #调用get方法
obj.NAME = 'alex'  #调用set方法
desc = Foo.NAME.__doc__   #调用第四个描述
print(desc)
del obj.NAME  #调用第三个删除方法

该段代码的执行结果如下:

get_name set_name description. del_name

property处理私有属性

最后,展示如何利用property函数来操作私有属性的getter和setter方法。


class Person(object):
  def __init__(self, age):
    self.__age = age
  def set_age(self, value):
    self.__age = value
  def get_age(self):
    return self.__age
  AGE = property(get_age, set_age)
person = Person(15)
person.AGE = 20
print(str(person.AGE))

运行结果如下:

20

如需进一步了解Python相关知识,建议参考本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》以及《Python入门与进阶经典教程》。

希望上述关于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 算法库。