Python3面向对象中property用法

Python中,@property是一个内置装饰器,用于创建只读属性(read-only attribute)的一个简便方法。通过使用property装饰器,可以将类中的方法转换为与属性相同的方式访问,有助于实现数据封装和数据隐藏。roperty() 也用于创建属性,也可以用类中的方法来控制对某个实例属性的访问、设置、删除等操作,但它们在使用方式上有所不同。

参考文档:Python3面向对象中property用法-CJavaPy

1、@property装饰器

@property 装饰器是一个更方便、简洁的方式,用于将类中的方法转换为同名的只读属性。通过在方法定义前加上 @property 装饰器,可以将这个方法作为属性的"获取"方法。如还需要定义设置或删除属性的方法,可以使用 @属性名.setter 和 @属性名.deleter 装饰器。

class Celsius:
    def __init__(self, temperature=0):
        self._temperature = temperature

    @property
    def temperature(self):
        print("Getting value...")
        return self._temperature

    @temperature.setter
    def temperature(self, value):
        print("Setting value...")
        if value < -273.15:
            raise ValueError("Temperature below -273.15 is not possible.")
        self._temperature = value

# 使用
c = Celsius()
c.temperature = 37
print(c.temperature)

2、property() 函数

property() 是一个内置函数,可以用来创建或返回一个属性值。property() 函数的典型用法是在类定义中创建一个只读属性,它接受四个参数:fgetfsetfdel 和 doc,分别对应属性的获取方法、设置方法、删除方法和文档字符串。

参数描述
fget用于获取属性值的函数
fset用于设置属性值的函数
fdel用于删除属性值的函数
doc属性的文档字符串,如果没有提供,
则从fget函数中获取

使用示例:

class Celsius:
    def __init__(self, temperature=0):
        self._temperature = temperature

    def get_temperature(self):
        print("Getting value...")
        return self._temperature

    def set_temperature(self, value):
        print("Setting value...")
        if value < -273.15:
            raise ValueError("Temperature below -273.15 is not possible.")
        self._temperature = value

    temperature = property(get_temperature, set_temperature)

# 使用
c = Celsius()
c.temperature = 38
print(c.temperature)

3、property() 函数 和 @property装饰器 区别

property() 函数 需要显式地传入获取、设置、删除方法和文档字符串,适用于早期的Python版本,或者当需要在运行时动态地创建属性时。@property 装饰器 提供了一种更为简洁和直观的方式来定义属性及其访问器方法。它使得代码更加易读和易于维护。@property 装饰器是更推荐的方式,因为它让代码更加简洁和Pythonic。然而,了解 property() 函数的工作方式也是很有用的,尤其是在需要与早期代码兼容或执行一些特殊操作时。

 参考文档:Python3面向对象中property用法-CJavaPy

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值