python 类property, setter,getter使用
前言
本篇学习一下python中property装饰器,setter,getter的使用
property装饰器
python类中,property装饰器用于将方法转换成同名只读属性,被装饰的方法可以像成员一样调用,例如:
class TestClass(object):
def __init__(self, value):
self._value = value
@property
def test(self):
return 1
t = TestClass(10)
print(t.test)
类属性getter
进一步,使用property装饰类内成员,可以防止成员被误修改。比如下面类中的_value 成员,可以直接从外部读取和修改内容。使用@property 装饰的value 属性可以像成员一样直接读取(getter),但不可以被直接修改了。
class MyClass(object):
def __init__(self, value):
self._value = value
@property
def value(self):
return self._value
c1 = MyClass(10)
print(c1._value)
c1._value = 20
print(c1.value)
c1.value = 20
类属性setter,deleter
如果想通过修改属性,可以使用属性setter ;如果想删除属性,可以使用deleter :
class MyClass(object):
def __init__(self, value):
self._value = value
@property
def value(self):
return self._value
@value.setter
def value(self, value):
self._value = value
@value.getter
def value(self):
return self._value
@value.deleter
def value(self):
del self._value
c1 = MyClass(10)
print(c1.value)
c1.value = 20
print(c1.value)
del c1.value
print(c1.value)
property函数
此外,还可以通过property() 这个函数把类方法转换成类属性,参数按顺序分别是getter,setter,deleter,doc(参数可缺省):
class MyClass2(object):
def __init__(self, value):
self._value = value
def get_value(self):
return self._value
def set_value(self, value):
self._value = value
def del_value(self):
del self._value
PROPERTY = property(get_value, set_value, del_value, 'Class MyClass2')
print(MyClass2.PROPERTY.__doc__)
c2 = MyClass2(10)
print(c2.PROPERTY)
c2.PROPERTY = 20
print(c2.PROPERTY)
del c2.PROPERTY
|