Python 类中 property 属性的两种实现方式与用法详解
在 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 属性管理的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













