属性封装
当类中的某些属性,我们要限定他的读写权限的时候,我们就可以使用类的属性封装。
属性封装的装饰器
- property (只读)
- obj_name.setter (只写)
- obj_name.deleter (可删除)
e.g.
class People(object):
"""
描述人的类实现,限定性别和年龄范围.
"""
def __init__(self, name):
self.name = name
# 私有属性 存储校验数据
self.__age = 0
self.__gender = None
@property # 读
def age(self):
if self.__age == 0:
print("you haven't set age")
return None
return self.__age
@property # 读
def gender(self):
if self.__gender is None:
print("you haven't set gender")
return None
return self.__gender
@age.setter # 写
def age(self, age):
if 0 < age < 120:
self.__age = age
else:
print('age set failure!')
@gender.setter # 写
def gender(self, gender):
if gender.lower() in ['man', 'woman']:
self.__gender = gender.lower()
else:
print('gender set failure')
if __name__ == '__main__':
people = People('laowang')
print('name:', people.name, 'gender:', people.gender, 'age:', people.age)
people.age = 10
people.gender = 'man'
print('name:', people.name, 'gender:', people.gender, 'age:', people.age)
people.age = 1000
people.gender = 'double'
print('name', people.name, 'gender:', people.gender, 'age', people.age)