python的property函数

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这个名字,变量名和函数名重复的话会死循环的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章