python中property方法有用_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 # 收入清零

注意:

这个三个方法的方法名必须都是一样的

第一个装饰器@property不能省

@property要写在@revenue.setter和@revenue.deleter前面,

调用bus.revenue时不要加括号bus.revenue()

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

property方法中有4个参数:

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

fget:function to be used for getting an attribute value

fset:function to be used for setting an attribute value

fdel:function to be used for del'ing an attribute

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、付费专栏及课程。

余额充值