python的property函数

本文介绍了Python内置函数property的使用方法及原理。通过实例演示了如何控制类中变量的访问规则,并解释了为什么Python需要property函数来实现类似private的效果。
python的builtin函数property其实很简单,其实就像java中bean的概念一样。可以控制类中变量的访问规则,property()函数实现的原理应该就是几天前写的__getattr__,__getattribute__等等函数有关。
有人回想,为什么python要控制变量的访问?难道实现不了private和protected么?变量命名是用两条下划线不能使变量private么?
很遗憾,不可以。两条下划线只是起到规范的作用,可能会报警,但是如果你愿意的话,还是可以无碍访问的。而且随着python版本变化搞不好以后这招还有可能不灵。所以我们需要property函数

class Propt(object):


def __init__(self):
self.__a2 = 'a2'
self._a1 = 'a1'
self.a = 'a'
self._field1 = 'field1'


@property
def field1(self):
print("field1 got")
return self._field1


@field1.setter
def field1(self, val):
print("field1 set")
self._field1 = val


p = Propt()
print(p.field1)
p.field1 = 'a'

输出结果是:
field1 got
field1
field1 set

真的是非常简单,如果你把函数field加上@property,那么_field1就是只读的,除非你再加上field1.setter。
有个小疑问是,变量名可不可以改成其它的?比如说abcdefg,而保持函数名不变?嗯,这是没问题的,只不过千万不要改成field这个名字,变量名和函数名重复的话会死循环的。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值