Python类属性详解:@property装饰器与三种操作方式

阿麦
阿麦
发布时间:2026-10-15 | 4人浏览过
原创

本文深入解析Python类属性的概念与操作方式。重点介绍使用@property装饰器实现getter、setter和deleter功能,以及通过实例直接访问和内置函数操作属性的方法。通过具体代码示例说明如何控制属性取值、防止随意修改,并澄清实例与类属性的关系,帮助开发者掌握Python属性的高级应用技巧。

Python类属性概述

首先明确属性的基本定义。

在Python中,属性本质上是普通方法的衍生形式。

操作类属性主要包含以下三种方法:

第一种方法是利用@property装饰器来操作类属性。

第二种方法是直接通过类或实例对象来操作属性,例如使用obj.name读取、obj.age=18赋值或del obj.age删除。

第三种方法是调用Python内置的相关函数来操作属性。

探讨属性存在的实际意义:

第一点,访问属性时可以营造出与访问数据字段完全相同的假象。由于属性由方法衍生而来,若Python没有属性机制,普通方法完全可以替代其功能。

第二点,定义属性允许动态获取特定属性值,因为属性值由对应的方法逻辑实现,这使得应用场景更加灵活。

第三点,可以制定自定义的属性规则,从而防止他人随意修改属性值,增强数据安全性。

类属性的三种操作方法

接下来详细阐述上述三种操作类属性的具体实现方式:

使用@property装饰器

第一种方式:使用@property装饰器操作类属性。

在定义时,需在普通方法基础上添加@property装饰器;该属性方法仅包含self参数,调用时无需添加括号。

该方法的优势如下:

1) @property装饰器能够实现其他编程语言中常见的getter、setter和deleter功能,例如实现获取、设置和删除隐藏属性的操作。

2) 借助@property装饰器,可以对属性的读取和赋值过程进行严格控制,进而提升代码的稳定性。

代码实例演示

实例代码1展示如下:


#encoding=utf-8 
class Goods(): #新式类
 @property
 def price(self): #查看属性值 
 print ('@property ') 
 @price.setter #修改、设置属性 
 def price(self, value): 
 print ('@price.setter' ) 
 @price.deleter#删除属性
 def price(self): 
 print ('@price.deleter') 
 
obj = Goods(50) 
obj.price# 自动执行 @property 修饰的 price 方法,并获取方法的返回值 
obj.price = 2000 # 自动执行 @price.setter 修饰的 price 方法,并将2000赋值给方法的参数
del obj.price # 自动执行 @price.deleter 修饰的 price 方法 
结果输出:
@property
@price.setter
@price.deleter

实例代码2演示如何通过@property装饰器对属性的取值和赋值施加控制:


class Goods(object):
  def __init__(self):
    self.value=50
  @property
  def price(self): # 查看属性
    return self.value
 
  @price.setter # 添加或设置属性(属性名.setter)
  def price(self, value):
    if value >=50 and value<=100: #对属性的取值和赋值加以控制
      self.value=value
      print (self.value)
    else:
      print ("请输入一个50到100之间的数!")
 
  @price.deleter # 删除属性(属性名.deleter) 注意:属性一旦删除,就无法设置和获取
  def price(self):
    del self.value
    print ("price is deleted!")
 
obj = Goods()
print (obj.price)  # 自动执行 @property 修饰的 price 方法,并获取方法的返回值
obj.price=106   # 自动执行 @price.setter 修饰的 price 方法,并将106 赋值给方法
del obj.price   # 自动执行 @price.deleter 修饰的 price 方法
结果输出:
50
请输入一个50到100之间的数!
price is deleted!

实例与类属性关系分析

扩展实例分析:


class Dog(object): 
 
 name = 'dog' 
 
 def init(self): 
 
  self.age = 18
 
d1 = Dog()

d2 = Dog()

这里引入两个实例d1和d2进行说明。


d1.name # 输出 dogd2.name # 输出 dogd1.name = 'abc'
d1.name # 输出 abcd2.name # 输出 dogDog.name # 输出 dog

原因在于d1.name输出dog并非因为该实例共享了类属性,而是因为该实例自身没有dog属性,Python因此查找并返回了类属性。然而,一旦执行d1.name的修改操作,相当于给d1实例绑定了name属性,此后d1.name便与类属性无关。既然涉及赋值即绑定属性,d1.name与d2.name的含义及值便不再相同,显然它们的数据并未共享。

至此,关于Python类属性的介绍结束,更多相关内容可搜索本站过往文章或继续浏览后续文章,感谢支持。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表