有人回想,为什么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这个名字,变量名和函数名重复的话会死循环的。