# 类的私有化
# 封装:1.私有化属性 2.定义共有set和get方法
# __属性名,就是将属性私有化,访问范围仅仅限于类中
class Person:
def __init__(self, name, age):
self.__name = name
self.__age = age
self.__score = 59
def __str__(self):
return '姓名:{},年龄:{},考试分数:{}'.format(self.__name, self.__age, self.__score)
# 定义共有的set和get方法
# set是为了赋值
def setName(self, name):
self.__name = name
def setAge(self, age):
self.__age = age
# get是为了取值
def getName(self):
return self.__name
def getAge(self):
return self.__age
p = Person('张三', 30)
# print(dir(p))
# p.setName('李四')
# print(p.getName())
# print(p.getAge())
# 使用装饰器实现私有化
class Person2:
def __init__(self, name, age):
self.__name = name
self.__age = age
def __str__(self):
return '姓名:{},年龄:{}'.format(self.__name, self.__age)
# 现有getXXX
@property
def name(self):
return self.__name
# 再有setXXX,因为set是依赖get的
@name.setter
def name(self, name):
if len(name) > 6:
self.__name = name
else:
print('名字不符合规范')
@property
def age(self):
return self.__age
@age.setter
def age(self, age):
self.__age = age
p2 = Person2('王五', 40)
print(p2)
p2.name = 'zhaoqian'
print(p2)