使用property可以限定类属性的读写
使用property()函数
函数声明:
property(fget=None, fset=None, fdel=None, doc=None)
优点:
按照一般的写set和get的思路,不用加装饰器,只需在get和set函数后加上property函数即可
示例:
class Student(object):
def __init__(self, name):
self._name = name
self._sex = None
def __get_sex(self):
return self._sex
def __set_sex(self, value):
self._sex = value
def __del_sex(self):
print('Del sex')
del self._sex
sex = property(__get_sex, __set_sex,__del_sex, doc="I'm the student's sex")
s1 = Student('小明')
print(s1.sex) # None
s1.sex = '男'
print(s1.sex) # 男
del s1.sex # 男
"""
结果
None
男
Del sex
"""
如果给定 doc 参数,其将成为这个属性值的 docstring,否则 property 函数就会复制 fget 函数的 docstring(如果有的话)。
2 使用@property
class Student(object):
def __init__(self, name):
self.__name = name
self.__sex = None
@property
def sex(self):
"""I'm the student's sex"""
return self.__sex
@sex.setter
def sex(self, value):
self.__sex = value
@sex.deleter
def sex(self):
print('Del sex')
del self.__sex
s1 = Student('小明')
print(s1.sex)
s1.sex = '男'
print(s1.sex)
del s1.sex
"""
结果
None
男
Del sex
"""
注意:
@property
@sex.setter
@sex.deleter
要使用同一个函数名