python3中property属性的使用方法

作用:

使一个方法调用起来像调用属性一样,简化调用者在获取数据的流程,使代码更整洁。

两种方式实现property属性

1、装饰器:在方法上应用装饰器

  • python2中只有@property一种修饰方法
  • python3中有@property、@方法名.setter、@方法名.deleter三种修饰方法,分别实现获取、修改和删除
class Bus:
    def __init__(self):
        # 票价
        self.price = 2
        # 收入
        self.revenue = 200

    @property
    def passage_no(self):
        value = self.revenue / self.price
        return value

    @passage_no.setter
    def passage_no(self, num):
        self.revenue = num

    @passage_no.deleter
    def passage_no(self):
        del self.revenue


bus = Bus()
print(bus.passage_no)  # 计算乘客数量
bus.passage_no = 60  # 修改乘客数计算收入
print(bus.passage_no)
del bus.passage_no  # 收入清零

注意:

  1. 这个三个方法的方法名必须都是一样的
  2. 第一个装饰器@property不能省
  3. @property要写在@revenue.setter和@revenue.deleter前面,
  4. 调用bus.revenue时不要加括号bus.revenue()

2、类属性:在类中定义值为property对象的类属性

property方法中有4个参数:

property(fget=None, fset=None, fdel=None, doc=None)

  1. fget:function to be used for getting an attribute value
  2. fset:function to be used for setting an attribute value
  3. fdel:function to be used for del'ing an attribute
  4. doc:docstring
class Bus:
    def __init__(self):
        # 票价
        self.price = 2
        # 收入
        self.revenue = 200

    def get_passage_no(self):
        value = self.revenue / self.price
        return value

    def set_passage_no(self, num):
        self.revenue = num

    def del_passage_no(self):
        del self.revenue

    PRO = property(get_passage_no, set_passage_no, del_passage_no, "==============")


bus = Bus()

print(bus.PRO)   # 计算乘客数量
bus.PRO = 60     # 修改乘客数计算收入
print(bus.PRO)
print(Bus.PRO.__doc__)
del bus.PRO    # 收入清零

property属性在创建类时,可以使用方法间接访问私有化属性,完成类似权限验证等功能,这样在实例化后仍然是以访问属性的方式访问私有化属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值