@property,指示getter方法
@name.setter,知识setter方法
class Duck():
def __init__(self,input_name):
self.hidden_name = input_name
def get_name(self):
print('inside getter')
return self.hidden_name
def set_name(self,input_name):
print('inside setter')
self.hidden_name = input_name
可以使用get_name或者set_name来显示的获取设置hidden_name,这样显示的调用get,set方法显然不利于隐藏内部信息
代码修改如下:
class Duck():
def __init__(self,input_name):
self.hidden_name = input_name
@property
def name(self):
print('inside getter')
return self.hidden_name
@name.setter
def name(self,input_name):
print('inside setter')
print input_name
self.hidden_name = input_name
调用方法:
fowl = Duck('alpha')
fowl.name="Donald"
实际上,由于python中的所有的特性都是公开的,所以有人知道内部的变量名是hiden_name,仍然可以使用fowl.hidden_name来访问,这个可以用python中特有的命名方式来解决。
但是@property,@name.setter还是从一定程度上隐藏了内部的细节