在C++,java等其他语言种对一个私密属性进行操作作时都需要创建两个方法,get方法和set方法
Python当然也可以这样做
class Man(object):
def get(self):
return self._name
def set(self,name):
if not isinstance(name,str):
raise ValueError('name must be an string')
self._name = name
m = Man()
m.set('jack')
print(m.get())
结果:jack
可是,每次都要通过方法才能对值进行操作感觉有点麻烦,有没有可以直接对变量进行操作的方法?
有!就是使用property装饰器
class Man(object):
@property
def name(self):
return self._name
@name.setter
def name(self,value):
if not isinstance(value,str):
raise ValueError('value must be an string')
self._name = value
m = Man()
m.name = 'ben'
print(m.name)
只要加上了property装饰器,把一个get方法变成了属性,这时name.setter又把set方法变成属性赋值,这样就拥有了一个可以操作的变量了。
上面代码实现了私有变量的读写操作,下面给大家介绍:只读、只写操作
class Lady(object):
def __init__(self,name):
self._name = name
@property
def name(self):
return self._name
@property
def age(self):
return None
@age.setter
def age(self,value):
self._age = value
candy = Lady('Candy')
print(candy.name)
candy.age = 20
print(candy.age)
结果:Candy
None
只写上property装饰器,没有写setter只能读取name的值,这就实现了只读。
把property装饰的函数然后一个None,而settr可以进行赋值,这就实现了只写。
如有疑问或者错误的地方可以评论告诉我,我回及时回复的