Python 修饰符@

1. 在类中使用

1.1 @property

  • 首先定义一个类Circular,经过实例化后,调用类方法radius(),输出圆的半径。
class Circular(object):

    def __init__(self, radius):
        self._radius = radius

    def radius(self):
        return self._radius

circular = Circular(2)
print(circular.radius())  # 2

在Python中,既要保护类的封装特性,又要让开发者可以使用对象.属性的方式操作类属性,除了使用 property()函数,Python 还提供了@property装饰器。通过 @property 装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加小括号()。实现了以访问属性的方式来访问方法。

class Circular(object):

    def __init__(self, radius):
        self._radius = radius

    @property
    def radius(self):
        return self._radius

circular = Circular(2)
print(circular.radius)  # 2
  • 上面程序中,使用@property修饰了radius()方法,这样就使得该方法变成了_radius属性的getter方法。需要注意的是,如果类中只包含该方法,那么_radius属性将是一个只读属性。也就是说,在使用Circular类时,无法对_radius属性重新赋值,即运行如下代码会报错:
circular = Circular(2)
circular.radius = 3
print(circular.radius)

而要想实现修改_radius属性的值,还需要为_radius属性添加 setter方法,就需要用到setter装饰器。

class Circular(object):

    def __init__(self, radius):
        self._radius = radius

    @property
    def radius(self):
        return self._radius

    @radius.setter
    def radius(self, value):
        self._radius = value

circular = Circular(2)
circular.radius = 3
print(circular.radius)  # 3

在上面的程序中,把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@radius.setter,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值