使用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要使用同一个函数名

本文介绍Python中使用property和@property装饰器进行类属性封装的方法。通过示例展示如何限制类属性的读写,以及如何为属性添加文档说明。适用于Python初学者和希望提高代码封装性的开发者。
875

被折叠的 条评论
为什么被折叠?



